TYPE A:Wy führen diese scheinbar äquivalenten Funktionsdefinitionen zu unterschiedlichen Ergebnissen?
val even1 = (x:Int) => { println("in even1"); x % 2 == 0}
Ausgabe auf REPL:
even1: Int => Boolean = <function1>
TYP B:
val even2 : Int => Boolean = { println("in even2");_% 2 == 0}
Ausgabe auf REPL:
in even2
even2: Int => Boolean = <function1>
Ich kenne den Unterschied zwischen " def 'und 'val' Deklaration einer Funktion, obige Bedingung sieht für mich etwas anders aus. Bitte helfen Sie zu verstehen.
'Die Anweisung println in even1 wird jedes Mal ausgeführt, wenn even1 aufgerufen wird, während die Anweisung println in even2 nur einmal ausgeführt wird, wenn even2 definiert ist. Warum? Die Antwort, die du zur Verfügung stellst (wie es ist), würde auch für 'even1' gelten:' Die rechte Seite ist ein Block ... ' – jarandaf
Ich möchte gleich fragen, warum dieses unterschiedliche Verhalten? Beide Funktionen, Erklärung sieht auf REPL gleich aus Ausgabe – Sunny
@jarandaf Nein. Die rechte Seite der Definition von 'even1' ist kein Block, sondern eine Funktion: '(x: Int) => {println (" in even1 "); x% 2 == 0} '. – Jubobs