Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

420
Views
¿Por qué usamos el prefijo _ en algunos casos para definir variables de instancia en Ruby?

Veo en las clases de Ruby que algunas personas usan el prefijo _ para definir variables de instancia como @_property mientras que en condiciones normales attr_writer usa el nombre normal como @property para definir variables de instancia.

¿Cuál es el punto de hacer esto y cuál es la diferencia?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

El prefijo _ no es una característica del idioma, no hace nada especial, es solo una convención.

En la mayoría de los casos, el desarrollador quiere indicar que una variable no está en uso, por ejemplo, una variable de bloque que no se usa en un bloque. O quieren indicar que la variable es una variable interna de un módulo o gema y que otros no deben leer o modificar esta variable directamente.

over 4 years ago · Santiago Trujillo Report

0

Hay 2 respuestas posibles aquí dependiendo del tipo de variable.

Instancia variable

Cuando _ se usa para prefijar una variable de instancias (como en su pregunta), generalmente es solo una convención para dejar en claro que esa variable de instancia es un detalle de implementación privado y no debe usarse fuera del alcance actual. Puede encontrarlo especialmente en módulos que se incluirán en algunas otras clases, en cuyo caso la variable de instancia está definida y utilizada por ese módulo, pero pertenece y está dentro del alcance del objeto mismo. Personalmente, prefiero los registros con ámbito de objeto para esto, pero la variable de instancia "privada" es una forma rápida, sucia y popular de hacerlo. Además, el prefijo del nombre de la variable de instancia con _ reduce las posibilidades de conflicto de nombres.

 # Library code module SomeExternalLibraryModule def foo @_something ||= SomeExternalLibraryModule::Something.new(self) end end # Application code class User include SomeExternalLibraryModule attr_reader :something # name conflict "avoided"! Phew! def bar @_something.do_sth # "_" means - you'd better know what you're doing here! # There is no guarantee that instance variable will be present in the future release end end

Variable local

Cuando la variable local tiene el prefijo _ , significa que esa variable no se usa en el código. Es especialmente útil cuando se usan iteradores o se consumen otras entradas de elementos múltiples de las que solo está interesado en uno.

Es bastante común ver solo _ como nombre de variable. Tiene un significado un poco especial para el analizador, que es decir explícitamente "No me importa qué es eso". Como tal, es el único nombre de argumento que se permite varias veces en una sola definición:

 def foo(_, _, a) a end foo(1,2,3) #=> 3 def bar(a,a,b); end #=> SyntaxError

Sin embargo, esta suele ser la mejor práctica para usar "No me importa" con un nombre, lo que te facilitará la vida en el futuro si realmente decides que necesitas usar otros argumentos:

 def foo(_name, _html_options, options) options.delete(:some_option) super end
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!