Anscheinend können Sie apply nicht mit einem Datensatzkonstruktor aufrufen:
%Vor%schlägt beim Lesen fehl, weil Foo nicht erwartet wird. an diesem Ort.
Die einzige offensichtliche Problemumgehung, an die ich denken konnte, war, eine Factory-Funktion hinzuzufügen:
%Vor%was natürlich angewendet werden kann.
Vermisse ich etwas? Ich würde dies von C # / Java erwarten, aber ich dachte nur, dass es in Clojure etwas enttäuschend war ...
Zurück auf diese Post-1.3 ....
In de Clojure 1.3 erstellt defrecord zwei generierte Konstruktorfunktionen. Gegeben:
%Vor% Dies erzeugt eine Positionskonstruktorfunktion ->Person
:
und eine Kartenkonstruktorfunktion map->Person
:
Da dies eine Map ist, sind alle Schlüssel optional und nehmen im konstruierten Objekt einen Nullwert an.
Sie sollten diese Funktionen von der ns anfordern, in der Sie den Datensatz deklarieren, aber Sie müssen die Datensatzklasse nicht wie bei der Verwendung des Java-Klassenkonstruktors importieren.
Weitere Details:
Foo.
ist ein Java-Klassenkonstruktor, daher hat es typische Java-Interop-Einschränkungen, wie Sie es nennen. Das Erstellen einer Konstruktorfunktion ist eine gebräuchliche Lösung (es bedeutet auch, dass Sie das Foo nicht in einem anderen Namensraum importieren müssen).
Das Problem ist bekannt und auf der Clojure-Mailingliste wird viel darüber gesprochen. Weitere Unterstützung wird wahrscheinlich in zukünftigen Clojure-Versionen hinzugefügt werden.
Für jetzt müssen Sie Ihre eigenen Funktionen verwenden oder Ссылка verwenden, die einige Funktionen wie unterstützt:
Tags und Links clojure clojureclr