Ruby: автоматически устанавливать переменную экземпляра в качестве аргумента метода?
Планируется ли реализовать поведение ruby, подобное функции CoffeeScript, заключающейся в указании имени переменной экземпляра в списке аргументов метода? подобно
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
Мне известен этот вопрос:в Ruby я могу как-то автоматически заполнить переменные экземпляра в методе initialize? , но все решения (включая мое собственное), похоже, не соответствуют философии простоты рубина.
И будут ли какие-либо недостатки такого поведения?
ОБНОВИТЬ
Одной из причин этого является философия DRY (не повторяйся) сообщества ruby. Мне часто приходится повторять имя переменной аргумента, потому что я хочу, чтобы оно было присвоено переменной экземпляра с тем же именем.
def initialize(name)
# not DRY
@name = name
end
Единственный недостаток, о котором я могу подумать, это то, что метод может ничего не делать, если у него нет тела. Если вы сканируете быстро, это может выглядеть как запрет. Но я думаю, что со временем мы можем адаптироваться.
Другой недостаток: если вы устанавливаете другие переменные экземпляра в теле, и вы пытаетесь быть удобочитаемыми, помещая все назначения в начале, это может потребовать большей когнитивной силы. чтобы увидеть, что назначения также происходят в списке аргументов. Но я не думаю, что это сложнее, чем, скажем, увидеть вызов константы или метода и перейти к его определению.
# notice: instance var assignments are happening in 2 places!
def initialize(@name)
@errors = []
end