Dlaczego wyraźna instrukcja return (taka, która używa słowa kluczowego return
) w anonimowej funkcji zwraca z otaczającej funkcji nazwanej, a nie tylko z samej anonimowej funkcji?Instrukcje zwrotne Scala w anonimowych funkcjach
E.g. następujące wyniki programu w błąd typu:
def foo: String = {
((x: Integer) => return x)
"foo"
}
wiem, zaleca się unikać słowa kluczowego return
, ale jestem zainteresowany dlaczego jawne i ukryte oświadczenia powrotne mają inną semantykę w funkcji anonimowych.
W poniższym przykładzie instrukcja return "przetrwa" po zakończeniu wykonywania m
, a program spowoduje wyjątek w czasie wykonywania. Jeśli funkcje anonimowe nie powróciły z funkcji otaczającej, nie byłoby możliwe skompilowanie tego kodu.
def main(args: Array[String]) {
m(3)
}
def m: (Integer => Unit) =
(x: Integer) => return (y: Integer) => 2
Czy są jakieś poważniejsze przykłady, dlaczego potrzebna jest różnica w semantykach? Ponieważ to, co masz na liście, można łatwo emulować za pomocą zmodyfikowanego 'foreach', który ma parametr predykatu. – corazza