Что обозначает "&" перед аргументом?

Если последнему формальному аргументу метода предшествует амперсанд, блок, следующий за вызовом метода, будет трансформирован в объект класса 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

Вход для пользователей