Как два аргумента могут быть переданы методу с сигнатурой с одним аргументом?

StackOverflow https://stackoverflow.com/questions/1435400

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top