Es ist zu betonen, dass return
in einer proc kehrt von der lexikalisch umschließenden Methode zurück, d.h. die Methode, in der der proc erstellt wurde , no die Methode, die die Proc aufgerufen hat. Dies ist eine Folge der Closure-Eigenschaft von Procs. Der folgende Code gibt also nichts aus:
def foo
proc = Proc.new{return}
foobar(proc)
puts 'foo'
end
def foobar(proc)
proc.call
puts 'foobar'
end
foo
Obwohl der Prozess in foobar
wurde sie erstellt in foo
und damit die return
Ausgänge foo
, nicht nur foobar
. Wie Charles Caldwell oben schrieb, hat es etwas von GOTO. Meiner Meinung nach, return
ist in einem Block, der in seinem lexikalischen Kontext ausgeführt wird, in Ordnung, ist aber weit weniger intuitiv, wenn es in einem Proc verwendet wird, der in einem anderen Kontext ausgeführt wird.