Ruby: автоматически устанавливать переменную экземпляра в качестве аргумента метода?
====================================================================================

Планируется ли реализовать поведение ruby, подобное функции CoffeeScript, заключающейся в указании имени переменной экземпляра в списке аргументов метода?
подобно

Мне известен этот вопрос:[в Ruby я могу как-то автоматически заполнить переменные экземпляра в методе initialize?](https://stackoverflow.com/questions/9597249/in-ruby-can-i-automatically-populate-instance-variables-somehow-in-the-initializ/10855962) , но все решения (включая мое собственное), похоже, не соответствуют философии простоты рубина.

И будут ли какие-либо недостатки такого поведения?

ОБНОВИТЬ

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

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

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

 что вы ответили на свой вопрос, он не соответствует философии простоты рубина. Это добавило бы дополнительную сложность к тому, как параметры обрабатываются в методах, и перемещает логику управления переменными в параметры метода. Я вижу аргумент, что это делает код менее читабельным, но это кажется мне не слишком многословным.

 Некоторые сценарии, с которыми придется столкнуться @ param:

 Должны ли все эти сценарии быть действительными? Только`initialize`?`@*arg` кажется мне особенно рискованным. Все эти правила и исключения делают язык Ruby более сложным. В пользу автоматических переменных экземпляра, я не думаю, что это того стоит.



 можно ли на самом деле получить имена аргументов из метода ruby. Если это так, я мог бы использовать специальный префикс аргумента, такой как «iv\_», чтобы указать, какие аргументы должны быть установлены в качестве переменных экземпляра.

 И это возможно: [Как получить имена аргументов, используя отражение](https://stackoverflow.com/questions/622324/getting-argument-names-in-ruby-reflection).

Да! Так что я могу написать модуль, чтобы справиться с этим для меня. Затем я застрял, потому что, если я вызываю вспомогательный метод модуля, он не знает значений аргументов, потому что они локальны для вызывающей стороны. Ах, но у Рубина есть Связывающие объекты.

 Вот модуль (только ruby 1.9):

 А вот и использование:

Выход

 Он не позволяет иметь пустое тело метода, но он СУХОЙ. Я уверен, что его можно улучшить, просто указав, какие методы должны иметь такое поведение (реализованное через alias\_method), а не вызывая slurp\_args в каждом методе - хотя спецификация должна быть после того, как все методы определены.

 Обратите внимание, что имя модуля и вспомогательного метода, вероятно, можно улучшить. Я просто использовал первое, что пришло в голову.



А на самом деле..

 Работает в 1.8.7, но не в 1.9.3. Теперь простогд я узнал об этом ...