method(:function)
- это сообщение , отправленное (иногда называемое вызовом метода ) неявному получателю (то есть self
). Он отправляет сообщение method
неявному получателю (т. Е. self
), передавая :function
в качестве единственного аргумента.
:function
является литералом Symbol
, то есть это литеральная запись Symbol
. Symbol
- это тип данных, представляющий «имя чего-либо».
Унарный префикс ampersand &
, оператор «разворачивает» Proc
в блок . Т.е. он позволяет передать Proc
, где ожидается блок . Если объект не является Proc
, ему будет отправлено сообщение to_proc
, позволяющее ему преобразоваться в Proc
. (Оператор допустим только в списке аргументов и только для последнего аргумента. Это двойственный символ &
в списке параметров, который «скатывает» блок в объект Proc
.)
Proc
- это тип данных, представляющий исполняемый код. Это базовый класс библиотеки Ruby для подпрограмм первого класса.
Итак, для этого нужно вызвать метод method
для self
с :function
в качестве аргумента, вызвать to_proc
в возвращаемом значении «разверните» полученный Proc
объект в блок и передайте этот блок на вызов integrate
, как если бы вы написали что-то вроде
res = integrate(0, 1, a) do
# something
end
Метод method
здесь наиболее вероятен, метод Object#method
, который возвращает bound Method
object.
Итак, в целом, это несколько эквивалентно
res = integrate(0, 1, a) do |*args, &block|
function(*args, &block)
end
Но выражается в том, что обычно называют стиль без точек .