2014-10-23 8 views
5

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.

+0

Wäre toll, wenn Sie einen Fehlerbericht auf dem ASYNC Jira http://dev.clojure.org/jira/browse/ASYNC –

+0

einreichen könnten Ich wollte nur sicherstellen, dass es ein Fehler war, nicht meine Bibliothek missbrauchen. Ich werde den Fehler ablegen. –

+3

Filed das Problem: http://dev.clojure.org/jira/browse/ASYNC-99 –

Antwort

0

Wie Nathan Davis kommentiert, ist dies wie von core.async 0.2.374 behoben.