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