You can think of proc as a block not bound to method (so there is nothing to break from). Just as proc/block calling super causes localjumperror if not created in method. Sent from my iPhone On Aug 25, 2009, at 2:37 AM, Tanaka Akira <akr / fsij.org> wrote: > In article <245fb4700908231725i3fa65567xe82bcb5ca1b8dc90 / mail.gmail.com > >, > Yehuda Katz <wycats / gmail.com> writes: > >> There's no conceptual reason for programmers to differentiate >> between Proc >> objects and the block passed to methods, except that the latter >> provides >> some extra syntax to make the common use-case pretty. Trying to >> explain the >> difference to new Rubyists strikes me as something we'd be better >> off never >> having to do. > > Proc objects and blocks are different with "break". > > def m1 > yield > p :m1 > end > m1 { break } # break terminates m1 > > def m2(pr) > pr.call > p :m2 > end > m2(proc { break }) # break terminates proc in 1.8. LocalJumpError > in 1.9 > > "break" needs to know the method call to terminate. > Blocks knows but Proc objects doesn't. > -- > Tanaka Akira >