Come one answer nella questione legata mostra:
Le parole chiave return
sempre ritorna dal metodo o lambda nel contesto attuale. Nei blocchi, verrà restituito dal metodo in cui la chiusura era definita. Non è possibile effettuare il reso dallo chiamando il metodo o lambda.
Il tuo primo esempio ha avuto successo perché è stata definita victor
nella stessa funzione che si voleva tornare da, quindi un return
era legale in quel contesto. Nel secondo esempio, victor
è stato definito nel livello principale. L'effetto di tale return
, quindi, sarebbe non da restituire da batman_yield
(il metodo di chiamata), ma [se fosse valido] per tornare dal livello superiore stesso (in cui è stato definito Proc
).
Chiarificazione: mentre è possibile accedere al valore di ritorno di un blocco (ad es. "Il valore dell'ultima espressione valutata nel blocco viene restituito al metodo come valore del rendimento" - come da commento) , non è possibile utilizzare la parola chiave return
, per il motivo indicato sopra. Esempio:
def batman_yield
value = yield
return value
"Iron man will win!"
end
victor = Proc.new { return "Batman will win!" }
victor2 = Proc.new { "Batman will win!" }
#batman_yield(&victor) === This code throws an error.
puts batman_yield(&victor2) # This code works fine.
possibile duplicato di [Utilizzo 'return' in un blocco Ruby] (http://stackoverflow.com/questions/2325471/using-return-in-a-ruby-block) – mgibsonbr
Qui: http: // stackoverflow. it/questions/1435743/why-does-explicit-return-make-a-difference-in-a-proc – fmendez
So che stai imparando questo da codeacademy. Ho gli stessi dubbi. È un tutorial introduttivo decente, ma devi cercare su google un sacco per essere in grado di capire il tutorial. –