2014-10-23 5 views
5

मैं एक core.async go ब्लॉक, को शामिल जब मैं एक अजीब संकलन त्रुटि पर ठोकर खाई एक समारोह को लागू किया गया था:core.async go ब्लॉक संकलित करने में विफल रहता है जब प्रोटोकॉल आमंत्रण फ़ॉर्म में <! मैक्रो (multimethod '-item करने वाली सर्व शिक्षा अभियान' पर प्रेषण नहीं कर सकते हैं: प्रोटोकॉल-आह्वान)

CompilerException java.lang.IllegalArgumentException: 
No method in multimethod '-item-to-ssa' for dispatch value: :protocol-invoke, 
compiling:(NO_SOURCE_PATH:2:3) 

मैंने समस्या का प्रयास करने और रोकने के लिए थोड़ा प्रयोग किया, और पाया कि यह बहुत सामान्य था।

(defprotocol MyProtocol 
    (do-something [this param] "some method")) 

निम्नलिखित कोड संकलन नहीं होगा, अपवाद के साथ नाकाम रहने मैंने ऊपर आप से पता चला है: मैं किसी भी प्रोटोकॉल MyProtocol है कहो

(defn uncompilable! [me ch] 
    (go 
    (do-something me (<! ch)) ;; apparently, it hurts to use <! in a protocol method invocation 
    )) 

हालांकि, निम्नलिखित 2 बिना किसी समस्या के संकलन होगा:

(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)) 
    )) 

जाहिर है, यह 0 से अधिक में पाया जा सकता -item-to-ssa multimethod के साथ क्या करना हैनामस्थान।

ऐसा लगता है कि मुझे <! प्रोटोकॉल विधि आमंत्रण फ़ॉर्म के अंदर 'एक ऐसी स्थिति है जो go मैक्रो संभालने में विफल रहता है।

क्या किसी के बारे में कोई स्पष्टीकरण है? क्या मुझे एक बग फाइल करना चाहिए?


यह [org.clojure/core.async "0.1.346.0-17112a-alpha"] और दोनों [org.clojure/clojure "1.7.0-alpha1"] और [org.clojure/clojure "1.6.0"] का उपयोग कर हुआ।

एफवाईआई, यह तब हुआ जब मैं http-kit async वेब सर्वर और core.async से शादी करने के लिए एक रिंग-प्रकार मिडलवेयर लागू कर रहा था।

+0

बहुत अच्छा होगा अगर आप ASYNC जिरा http://dev.clojure.org/jira/browse/ASYNC –

+0

पर एक बग रिपोर्ट दर्ज कर सकते हैं तो बस यह सुनिश्चित करना चाहता था कि यह एक बग था, न कि पुस्तकालय का दुरुपयोग। मैं बग फाइल करूंगा। –

+3

इस मुद्दे को दायर किया: http://dev.clojure.org/jira/browse/ASYNC-99 –

उत्तर

0

नाथन डेविस ने टिप्पणी की, यह core.async 0.2.374 के रूप में तय किया गया है।

संबंधित मुद्दे