Liste von Scala ' s "magic" - Funktionen
Wo finde ich eine Liste von Scala ' s "magic" - Funktionen, wie apply
, unapply
, update
, +=
usw.?
Durch Magie-Funktionen meine ich Funktionen, die verwendet werden, von einigen syntaktischer Zucker des Compilers, zum Beispiel
o.update(x,y) <=> o(x) = y
Habe ich gegoogelt bei einigen Kombinationen scala
magic
und Synonyme zu functions
, aber ich habe nichts gefunden.
Ich bin nicht daran interessiert, mit der Nutzung von magic-Funktionen in der standard-Bibliothek, sondern in die Magie Funktionen besteht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Soweit ich weiß:
Getter/setter Verwandte:
Pattern-matching:
Für-Verstehens:
Präfix-Operatoren:
Darüber hinaus eine implizite von A nach B. Scala wird auch konvertieren
A <op>= B
inA = A <op> B
, wenn der ehemalige Betreiber ist nicht definiert, "op" ist kein alphanumerisches Zeichen, und<op>=
ist nicht!=
,==
,<=
oder>=
.Und ich glaube nicht, dass es keinen einzelnen Ort, wo alle von Scala ist syntaktischer Zucker aufgeführt sind.
identifier_=
? Nie gesehen.object X { var _x = 0; def x_=(n: Int) { _x = n }; def x = _x }; X.x = 5; println(X.x)
identifier
war nur dazu gedacht, ein Platzhalter. Es bekam. Danke.equals
aufgerufen wird==
Neben
update
undapply
gibt es auch eine Reihe von unären Operatoren, die (ich glaube) qualifizieren sich als magisch:unary_+
unary_-
unary_!
unary_~
Hinzufügen, dass die regelmäßige infix/suffix-Operatoren (das kann fast alles sein) und Sie haben sich das komplette Paket.
Sollten Sie wirklich einen Blick auf die Scala Language Specification. Es ist die einzige maßgebliche Quelle auf diesem Zeug. Es ist nicht schwer zu Lesen (solange Sie bequem sind mit Kontext-freien Grammatiken), und sehr einfach durchsuchbar. Das einzige, was es nicht geben, ist die XML-Unterstützung.
Sorry, wenn es nicht genau deine Frage zu beantworten, aber mein Lieblings-WTF-moment, so weit ist @ als Zuweisungsoperator inneren Muster entsprechen. Dank soft-copy von "Programming in Scala" fand ich heraus, was es war ziemlich schnell.
Mit @ können wir binden Sie alle Teil eines Musters, um eine variable, und wenn Sie den pattern-match erfolgreich ist, wird die variable erfassen den Wert der sub-Muster. Hier ist das Beispiel von Programmierung in Scala (Abschnitt 15.2 - Variable Bindung):
Und hier's was Programmierung Scala dazu sagt.
Der link funktioniert nicht mehr. Hier ist eine, die funktioniert.
Werde ich auch hinzufügen
_*
für pattern matching auf eine beliebige Anzahl von Parametern wieUnd operator Assoziativität in der Regel von Odersky-Löffel-Venners Buch:
Vielleicht sollten wir auch erwähnen, syntaktische desugaring von für Ausdrücke, die gefunden werden können hier
Und (natürlich!), alternative syntax für Paare
(wie korrekt darauf hingewiesen, dies ist nur ein implizite Konvertierung erfolgt durch eine Bibliothek, so ist es wohl nicht berechtigt, aber ich finde es ist eine gemeinsame Puzzle für Neulinge)
->
ist nur eine library-Funktion.Definiert sind Sie in der Scala Language Specification.
Soweit ich weiß, gibt es nur drei "magischen" Funktionen, wie Sie erwähnt.
Scalas Getter und Setter kann auch beziehen sich auf Ihre "Magie":
Möchte ich hinzufügen, dass es auch eine "Magische" Eigenschaft -
scala.Dynamic
:So können Sie die Sachen tun, wie