Что обозначает "&" перед аргументом?
чт, 02/08/2007 - 20:11 — spine
Если последнему формальному аргументу метода предшествует амперсанд, блок, следующий за вызовом метода, будет трансформирован в объект класса Proc и присвоен этому формальному аргументу.
Если последний аргумент в вызове метода - Proc объект, амперсанд перед этим аргументом превратит его
в блок, и метод сможет использовать yield для его вызова.
square = proc { |i| i*i }
def meth1(&b)
print b.call(9), "
"
end
meth1 { |i| i+i }
def meth2
print yield(8), "
"
end
meth2 { |i| i+i }
meth2(&square)
Результат:
18 16 64
