Wenn ich versuche, interne DSLs in Scala zu erstellen, stoße ich auf ein häufiges Problem und konnte keine Lösung erstellen. Um die Dinge etwas mehr wie eine typische Sprache aussehen zu lassen, möchte ich, dass die Syntax ungefähr so aussieht:
%Vor% In der Praxis gibt es mehrere Probleme. Das erste Problem besteht darin, ein Objekt model
zu erhalten, um auf diese Weise zwei Argumente zu erhalten. Wenn jemand irgendwelche Ideen hat, lass es mich wissen. Aber was ich getan habe, ist etwas mehr zu tun:
Wo das Modell jetzt eine Funktion ist, die dann ein Objekt mit einer apply
-Methode zurückgibt, die dann das folgende Lambda verbraucht. Damit kann ich leben. Ich könnte mit einem ähnlichen Problem innerhalb des Lambda leben, also Dinge wie decl 'Real 'x
oder decl('Real,'x)
auf der Innenseite. Aber ich möchte die Ergebnisse all dieser Ausdrücke in den verschnörkelten Klammern finden, um als Liste "zurück" zu kommen. Mit anderen Worten, was ich will, ist etwas wie das zu schreiben:
Dabei wird decl(...)
zu etwas vom Typ Declaration
und {...}
zu List[Declaration]
ausgewertet. Ich vermute, dass es einen Weg gibt, um dies zu tun, aber ich konnte es nicht finden. Kurz gesagt, würde ich gerne machen:
... bewerten Sie das Äquivalent von ...
%Vor%Kommentare oder Vorschläge?
Als erste Idee könnten Sie Variablenargumentlisten ausprobieren, die es Ihnen ermöglichen, Kommas anstelle von Semikolons zu verwenden:
%Vor% Alternativ können Sie ein trait
erweitern, um einige Klammern und Kommas zu entfernen:
OK, komplett überarbeitet, nachdem festgestellt wurde, dass 'Foo
der Modellname sein soll.
Dann auf der Website:
%Vor%Also sind die Gimmicks hier
1) Verwenden einer Variablen, um das aktuelle Modell zu verfolgen
2) mit -
Symbolen für Methodennamen (Sie könnten stattdessen apply
verwenden, wenn Sie Klammern bevorzugen)
3) Verwenden eines Builders, damit die zurückgegebene Klasse unveränderlich sein kann
Obwohl, TBH, könnte das ein bisschen viel sein, nur um einige Kommas zu vermeiden ...:)