¿Hay algún plan para implementar el comportamiento de ruby similar a la función CoffeeScript de especificar un nombre de variable de instancia en una lista de argumentos de método? Al igual que Ruby: establece automáticamente la variable de instancia como argumento de método?
class User
def initialize(@name, age)
# @name is set implicitly, but @age isn't.
# the local variable "age" will be set, just like it currently works.
end
end
Soy consciente de esta pregunta: in Ruby can I automatically populate instance variables somehow in the initialize method?, pero no parecen todas las soluciones (incluyendo la mía) para adaptarse a la filosofía de rubí simplicidad.
Y, ¿habría algún inconveniente por tener este comportamiento?
ACTUALIZACIÓN
Una de las razones de esto es la SECO (no repita usted mismo) filosofía de la comunidad rubí. A menudo me resulta necesario repetir el nombre de una variable de argumento porque quiero que se asigne a la variable de instancia del mismo nombre.
def initialize(name)
# not DRY
@name = name
end
Una desventaja que se me ocurre es que puede parecer que un método no está haciendo nada si no tiene cuerpo. Si está escaneando rápidamente, esto puede parecer una operación no operativa. Pero creo que dado el tiempo, podemos adaptarnos.
Otro inconveniente: si está configurando otras variables de instancia en el cuerpo, y trata de ser legible poniendo todas las asignaciones al principio, puede tomar más "poder" cognitivo para ver que allí las asignaciones también suceden en la lista de argumentos Pero no creo que esto sea más difícil que, por ejemplo, ver una llamada constante o de método y tener que saltar a su definición.
# notice: instance var assignments are happening in 2 places!
def initialize(@name)
@errors = []
end
Gracias por esta respuesta. Sin embargo, definitivamente parece más trabajo que valga la pena. :) – hrdwdmrbl
@jackquack Bueno, realmente solo tienes que hacer la configuración una vez. Luego en tus clases, todo lo que tienes que hacer es llamar 'enable_for' y' slurp_args'. – Kelvin