Ich habe diese Multi-Funktion in clojure geschrieben.Probleme mit der Defmulti Versandfunktion
(defmulti printlmt (fn [s] (> (count s) 10)))
(defmethod printlmt true [s] (println s))
(defmethod printlmt false [s] (println (take 10 s)))
ich dann versuchen, es auszuführen, wie unten ..
(printlmt "test")
Aber, halte ich die folgenden Fehler.
IllegalArgumentException No method in multimethod 'printlmt' for dispatch value: 4 clojure.lang.MultiFn.getFn (MultiFn.java:156)
In meinem Verständnis soll die anonyme Funktion einen Wert von true
zurückzukehren. Warum gibt die anonyme Funktion 4 zurück?
Wenn ich rufe Sie die Sendefunktion getrennt, wie diese
((fn [s] (> (count s) 0)) "test")
In diesem Fall ist es true
zurück!
Edit: ich das Terminal Text bin hinzugefügt, die ich habe:
startingclojure.core=> (defmulti printlmt (fn [s] (> (count s) 10)))
nil
startingclojure.core=> (defmethod printlmt true [s] (println s))
#object[clojure.lang.MultiFn 0x3315fe88 "[email protected]"]
startingclojure.core=> (defmethod printlmt false [s] (println (take 10 s)))
#object[clojure.lang.MultiFn 0x3315fe88 "[email protected]"]
startingclojure.core=>
startingclojure.core=> (printlmt "test")
IllegalArgumentException No method in multimethod 'printlmt' for dispatch value: 4 clojure.lang.MultiFn.getFn (MultiFn.java:156)
startingclojure.core=>
Ihr Code funktioniert für mich – Lee
@Lee Ich habe den eigentlichen Konsolentext hinzugefügt. Kannst du sehen, ob etwas nicht stimmt? – Teddy
Kein Problem mit beiden Code. hast du versucht, zu beenden und dann neu zu starten? Dumme Frage, aber vielleicht ist eine alte falsche Definition von printlmt immer noch hier –