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 я могу автоматически заполнять переменные экземпляра как-то в методе инициализации? , но все решения (включая мое собственное), похоже, не подходят для ruby философия простоты.

И есть ли недостатки в таком поведении?

ОБНОВЛЕНИЕ

Одной из причин этого является СУХАЯ (не повторяйтесь) философия сообщества ruby.Мне часто приходится повторять имя переменной-аргумента, потому что я хочу, чтобы оно было присвоено переменной экземпляра с тем же именем.

def initialize(name)
  # not DRY
  @name = name
end

Один недостаток, о котором я могу думать, заключается в том, что может выглядеть так, как будто метод ничего не делает, если у него нет тела. Если вы сканируете быстро, это может выглядеть как отсутствие операции. Но я думаю, что со временем мы сможем адаптироваться.

Еще один недостаток: если вы устанавливаете другие переменные экземпляра в теле и пытаетесь быть читабельным, помещая все присваивания в начало, может потребоваться больше когнитивной «силы», чтобы увидеть, что присваивания также происходят в теле. список аргументов. Но я не думаю, что это сложнее, чем, скажем, увидеть вызов константы или метода и перейти к его определению.

# notice: instance var assignments are happening in 2 places! 
def initialize(@name)
  @errors = []
end

9
задан Community 23 May 2017 в 12:10
поделиться