Почему оператор break в ruby ведет себя по-разному при использовании Proc.new v. Знак амперсанда?

Оператор перерыва для блоков (согласноЯзык программирования Ruby) определяется следующим образом:

он заставляет блок возвращаться к своему итератору, а итератор - к методу, который его вызвал.

Поэтому, когда выполняется следующий код, он приводит к LocalJumpError.

def test
    puts "entering test method"
    proc = Proc.new { puts "entering proc"; break }
    proc.call # LocalJumpError: iterator has already returned
    puts "exiting test method"
end
test

Хотя следующий кодне бросить LocalJumpError. Что особенного в знаке амперсанда? Разве знак амперсанда неявно использует Proc.new?

def iterator(&proc)
    puts "entering iterator"
    proc.call # invoke the proc
    puts "exiting iterator" # Never executed if the proc breaks
end

def test
    iterator { puts "entering proc"; break }
end
test

Другими словами, я читаю знак амперсанда как средство включения вызова Proc.new. В этот момент поведение должно быть таким же, как в первом фрагменте кода.

def iterator (p = Proc.new { puts "entering proc"; break})
...
end

отказ: Я новичок в изучении языка (ruby 1.9.2), и поэтому буду благодарен за ссылки и подробный синопсис.

Ответы на вопрос(3)

Ваш ответ на вопрос