Desugar it mit "-Xprint:parser"
oder "-Xprint:typer"
Beispiel 1 zu:
scala> (List(1,2) foldLeft 0)((hd, nxt) => hd + nxt)
...
List(1, 2).foldLeft(0)(((hd, nxt) => hd.$plus(nxt)))
...
immutable.this.List.apply[Int](1, 2).foldLeft[Int](0)(((hd: Int, nxt: Int) => hd.+(nxt)));
Wie Sie sehen können, übersetzt (List(1,2) foldLeft 0)
in (List(1, 2).foldLeft(0))
in der Parser-Phase. Dieser Ausdruck gibt eine Curry-Funktion zurück, die den zweiten Satz von Klammern verwendet, um ein Ergebnis zu erzeugen (denken Sie daran, dass eine Curry-Funktion nur eine Funktion ist, die ein Argument übernimmt und eine andere Funktion mit einem Argument weniger zurückgibt).
Beispiel 2 zu:
scala> List(1,2) foldLeft(0)((hd, nxt) => hd + nxt)
...
List(1, 2)(foldLeft(0)(((hd, nxt) => hd.$plus(nxt))))
...
<console>:8: error: not found: value foldLeft
List(1,2) (foldLeft(0)((hd, nxt) => hd + nxt))
Die Klammern werden um (foldLeft(0)((hd, nxt) => hd + nxt))
gehen.
Stil:
Die Art und Weise Sie sollen durch Leerzeichen getrennte Methoden verwenden, ist ein Objekt von 1 Methode 1 Satz Klammern gefolgt gefolgt, die ein neues Objekt erzeugt, das durch eine neue Methode verfolgt werden kann.
obj method paramerer // good
obj method1 paramerer1 method2 paramerer2 // good
obj method1 paramerer1 method2 paramerer2 method3 paramerer3 // compiles, but might need to be broken up
Sie können ein Objekt mit Postfix ein Verfahren folgen, die keine Parameter, aber das ist nicht immer der Stil genehmigt, vor allem für Accessoren.
foo.length // good
foo length // compiles, but can be confusing.
Raum begrenzt Methoden werden in der Regel entweder reine Funktionen (wie Karte, flatmap, Filter) oder für domänenspezifische Sprachen (DSL) reserviert.
Im Fall von foo.length
gibt es keine ()
auf length
, so dass der Leerraum nicht notwendig ist, um die Idee zu vermitteln, dass die Länge rein ist.
Ein Ausdruck, der ein '.' enthält, wird als [" selection "] (http://scala-lang.org/files/archive/spec/2.11/06-expressions.html#designators) bezeichnet Es ist der "Auswahl-Operator", wenn Sie möchten. –