ich eine Funktion beteiligt einen core.async go
Block Implementierung, wenn ich auf einem fremden Kompilierungsfehler gestolpert:core.async Go-Block kann nicht kompiliert werden, wenn das Protokollaufruf-Formular <! Makro (Multimethod- ‚-item-to-ssa‘ kann Versand auf nicht: Protokoll-invoke)
CompilerException java.lang.IllegalArgumentException:
No method in multimethod '-item-to-ssa' for dispatch value: :protocol-invoke,
compiling:(NO_SOURCE_PATH:2:3)
Ich experimentierte ein wenig zu versuchen und das Problem zu entfernen, und fand es sehr allgemein. Sagen, ich habe jedes Protokoll MyProtocol
:
(defprotocol MyProtocol
(do-something [this param] "some method"))
Der folgende Code wird nicht kompiliert werden, mit der Ausnahme, andernfalls ich Ihnen gezeigt, oben:
(defn uncompilable! [me ch]
(go
(do-something me (<! ch)) ;; apparently, it hurts to use <! in a protocol method invocation
))
Allerdings wird die folgende 2 ohne Probleme kompilieren:
(defn compilable! [me ch]
(let [call-it #(do-something me %)] ; wrapping the protocol call in a function
(go
(call-it (<! ch))
)))
(defn compilable-2! [me ch]
(go
(let [my-value (<! ch)] ; taking out the <! call
(do-something me my-value))
))
Offenbar hat dies als mit dem -item-to-ssa
Multimethod- zu tun in der 0 gefunden werdenNamensraum.
Es scheint mir die '<!
Inside Protocol Methode Aufruf Formular' ist eine Situation, die das go
Makro nicht behandelt.
Hat jemand eine Erklärung dazu? Soll ich einen Fehler einreichen?
Dies geschah [org.clojure/core.async "0.1.346.0-17112a-alpha"]
und sowohl [org.clojure/clojure "1.7.0-alpha1"]
und [org.clojure/clojure "1.6.0"]
verwenden.
FYI, das passierte, als ich eine Ring-Middleware implementierte, um http-kit async Webserver und core.async zu heiraten.
Wäre toll, wenn Sie einen Fehlerbericht auf dem ASYNC Jira http://dev.clojure.org/jira/browse/ASYNC –
einreichen könnten Ich wollte nur sicherstellen, dass es ein Fehler war, nicht meine Bibliothek missbrauchen. Ich werde den Fehler ablegen. –
Filed das Problem: http://dev.clojure.org/jira/browse/ASYNC-99 –