Как два аргумента могут быть переданы методу с сигнатурой с одним аргументом?
-
07-07-2019 - |
Вопрос
s = Proc.new {|x|x*2}
def one_arg(x)
puts yield(x)
end
one_arg(5, &s)
Как one_arg
узнает о & amp; s
?
Решение
Оператор & amp;
превращает Proc в блок, поэтому он становится методом с одним аргументом и блоком (который вызывается с помощью yield
). Если бы вы отключили & amp;
, чтобы он проходил через Proc напрямую, вы получили бы ошибку.
Другие советы
Используя & amp; s
, вы сообщаете one_arg
, что вы хотите, чтобы ваши Proc s
передавались как блок (пожалуйста, поправьте меня если я ошибаюсь). Эквивалентное письмо будет
one_arg(5) do |x|
x *2
end
В последнее время на SO было несколько вопросов, которые касаются этого. Август Лиллеас имеет довольно хороший напишите о некоторых тонкостях всего этого безумия Ruby.
Не связан с StackOverflow