Могу ли я сказать, если метод должен вернуть что-то в ruby? - PullRequest
4 голосов
/ 20 марта 2012

Я делаю метапрограммирование в ruby ​​и в реализации method_missing. Интересно, могу ли я сказать, используется ли сайт вызова в назначении?

Например:

x = special_function 'param'

будет поймано реализацией method_missing. Я хотел бы знать, могу ли я сказать, была ли вызвана функция следующим образом:

special_function 'param'

т.е. без левой стороны в назначении.

Можно ли в ruby ​​определить разницу между двумя приведенными выше примерами в коде?

Ответы [ 2 ]

4 голосов
/ 20 марта 2012

Я бы не подумал, что это возможно, просто потому, что каждый метод всегда возвращает что-то , и оценка метода не зависит от контекста, в котором он вызывается.

В этом случае присваивание является случайным и просто использует то, что возвращает метод.

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

1 голос
/ 20 марта 2012

Здесь нет никакой разницы для вашего случая, насколько я понимаю.

Ruby будет вызывать ваш код справа налево.

Поэтому он попытается выполнить сначала:

special_function 'param'

И тогда он присваивает результат x.

Так что, если метод special_function не определен, он выбросит его в method missing и, если он каким-то образом его обработает, вернет результатнемного назад.И x будет присвоено этому фактическому значению

PS , когда я читаю @ ne0lithic_coder, ответ выглядит так, будто я неправильно понял ваш вопрос.Вы можете увидеть эту тему: Может ли Ruby ничего не возвращать?

PPS Если вы не хотите назначать x, в некоторых случаях вы можете попробовать:

val = special_function 'param'
x = val unless val.nil? # if val
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...