Perché un'istruzione di reso esplicita (una che utilizza la parola chiave return
) in una funzione anonima restituisce dalla funzione denominata che la contiene e non solo dalla funzione anonima stessa?Istruzioni di ritorno Scala in funzioni anonime
E.g. i seguenti risultati del programma in un errore di tipo:
def foo: String = {
((x: Integer) => return x)
"foo"
}
So che è consigliato di evitare la parola chiave return
, ma mi interessa il motivo per cui le dichiarazioni esplicite ed implicite di ritorno hanno una semantica diversa in funzioni anonime.
Nell'esempio seguente, l'istruzione di reso "sopravvive" dopo che m
ha terminato l'esecuzione e il programma restituisce un'eccezione di run-time. Se le funzioni anonime non tornassero dalla funzione di inclusione, non sarebbe possibile compilare quel codice.
def main(args: Array[String]) {
m(3)
}
def m: (Integer => Unit) =
(x: Integer) => return (y: Integer) => 2
Avete alcuni esempi più seri di perché è necessaria la differenza nella semantica? Perché ciò che hai elencato può essere facilmente emulato con un 'foreach' modificato che ha un parametro predicato. – corazza