L'istruzione break per i blocchi (come da The Ruby Programming Language) è definito come segue:Perché l'istruzione break in ruby si comporta diversamente quando si utilizza Proc.new v. Il segno e commerciale?
provoca il blocco di ritornare alla sua iteratore e l'iteratore tornare al metodo invocato.
Pertanto, quando viene eseguito il codice seguente, risulta un 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
Mentre il seguente codice non lo fa gettare un LocalJumpError. Qual è la particolarità del segno e commerciale? Il segno e commerciale non usa implicitamente 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
In altre parole, ho letto il cartello commerciale come mezzo di in-rivestimento chiamata Proc.new. A quel punto il comportamento dovrebbe essere lo stesso del primo snippet di codice.
def iterator (p = Proc.new { puts "entering proc"; break})
...
end
responsabilità: Sto newb imparare la lingua (ruby 1.9.2), e quindi apprezzerò riferimenti e una sinossi dettagliata.
Non c'è tempo per una risposta corretta, ma questo riguarda lo scope, non tanto un Proc o un Lambda che sono speciali. – coreyward
quando si ottiene il tempo ... si prega di visitare di nuovo questa domanda. Apprezzerei la tua intuizione –
Invece di 'Proc.new' prova' lambda'. – Casper