Ich modelliere eine Programmiersprache zum Spaß und die Syntax wird stark von Scala-spezifischen Funktionsdefinitionen beeinflusst.
Ich bin auf ein Entwurfsproblem gestoßen, weil meine Sprache nicht zwischen Funktionen unterscheidet, die über die defSyntax (Klassenmethoden) definiert wurden, und anonymen Funktionen, die Werten zugewiesen wurden (erstellt mit =>) - sie beseitigt die Unterschiede sowohl in der Implementierung als auch im Verhalten .
Das Ergebnis ist, dass die folgenden zwei Definitionen dasselbe bedeuten:
def square(x: Int) = x*x
val square = (x: Int) => x*x
Es gibt keinen Grund, das letztere Formular (sofortige anonyme Funktionszuweisung) in einer normalen Situation zu verwenden - es ist einfach möglich , es anstelle des defFormulars zu verwenden.
Würde eine solche doppelte Syntax zum Definieren benannter Funktionen die Orthogonalität der Sprache oder einen anderen Designaspekt beeinträchtigen?
Ich bevorzuge diese Lösung, weil sie kurze und intuitive Definitionen von Methoden und benannten Funktionen (via def) sowie kurze Definitionen anonymer Funktionen (using =>) ermöglicht.
Edit: Scala tut Unterscheidung der beiden - anonyme Funktionen sind nicht das gleiche wie Methoden definiert mit defin Scala. Die Unterschiede sind jedoch relativ subtil - siehe die Beiträge, die ich zuvor verlinkt habe.
valNotation definieren?
funeine rekursive Funktion definieren.
def. Es ist nur ein Nebeneffekt der Tatsache, dass eine anonyme Funktion, (x : Int) => x + 1beispielsweise ein Objekt, ist und Objekte Werten mit zugewiesen werden können val f = .... Die Sprachdesigner hätten auf den Weg zu gehen , um die Syntax zu verbieten. Es ist nicht ganz dasselbe, als sich explizit darum zu bemühen, zwei verschiedene Syntaxen zu unterstützen, die (ungefähr) dasselbe tun.
However, assigning existing functionsscheint das Ende des Satzes zu fehlen