In dem folgenden Code, was ist die Klassifizierung (oder technischer Name) der Verwendung des Unterstrichs?Was ist die Verwendung von _ in Int => Int = _ + 1
scala> def f: Int => Int = _ + 1
f: Int => Int
scala> f(2)
res0: Int = 3
In dem folgenden Code, was ist die Klassifizierung (oder technischer Name) der Verwendung des Unterstrichs?Was ist die Verwendung von _ in Int => Int = _ + 1
scala> def f: Int => Int = _ + 1
f: Int => Int
scala> f(2)
res0: Int = 3
Von Functional Programming in Scala
... manchmal Strich Syntax für eine Funktionsliteral genannt, sind wir nicht einmal das Argument an die Funktion zu nennen stört, mit _ stellen das einzige Argument. Wenn dieser Notation können wir nur den Funktionsparameter Referenz einmal im Körper der Funktion (wenn wir _ wieder erwähnen, bezieht er sich auf ein anderes Argument an die Funktion)
In Ihrem Fall tun:
def f: Int => Int = _ + 1
würde das gleiche wie sein:
def f: Int => Int = x => x + 1
die unnötig erscheinen mag, wird aber ziemlich praktisch für höhere anonyme Funktionen vorbei geordnete Funktionen (die Funktionen sind, die Funktionen als Argumente):
def higherOrder(f: Int => Int) = { /* some implementation */ }
// Using your function you declared already
higherOrder(f)
// Passing an anonymous function
higherOrder((x: Int) => x + 1)
higherOrder((x) => x + 1)
higherOrder(x => x + 1)
// Passing an anonymous function with underscore syntax
higherOrder(_ + 1)
Betrachten Sie es als eine Eingabe, die durch den Anrufer geliefert werden
scala> def incrementByOne: Int => Int = _ + 1
incrementByOne: Int => Int
Was yo ist wieder eine Funktion, nimmt Int
und gibt eine Int
zurück.
X => Y
In Rückgabetyp bedeutet eine Funktion, den Typen X
als Eingabe- und Rückgabetyp Y
als Ausgang nehmen. jetzt X
und Y
könnte jeder Typ sein.
das Beispiel zu vervollständigen, würden Sie es als
scala> incrementByOne(10)
res0: Int = 11
scala> incrementByOne(99)
res1: Int = 100
scala>
die Int
als Eingabe nahm nennen (10
und 99
) und kehrte Int
als Ausgang (11
und 100
)
danke für die Klarstellung. Ich suchte nach einem syntaktischen "Namen", wenn der Unterstrich in einer anonymen Funktion verwendet wird. Von der Verbindung, die im 1. Pfosten gegeben wird. [Was nützt ein Unterstrich in Scala?] (Http://stackoverflow.com/questions/8000903/what-are-all-the-uses-of-andunderscore-in-scala). Es heißt "Platzhaltersyntax". Nicht wirklich intuitiv, aber es ist OK, solange es einen Namen gibt. – Polymerase
Platzhalter. Siehe http://stackoverflow.com/questions/8000903/what-are-all-the-uses-of-andunderscore-in-scala – YoungSpice