我刚接触clojure core.async库,正在通过实验尝试理解它。
但当我尝试以下代码时:
(let [i (async/chan)] (async/go (doall (for [r [1 2 3]] (async/>! i r)))))
它给我一个非常奇怪的异常:
CompilerException java.lang.IllegalArgumentException: No method in multimethod '-item-to-ssa' for dispatch value: :fn
然后我尝试了另一个代码:
(let [i (async/chan)] (async/go (doseq [r [1 2 3]] (async/>! i r))))
完全没有编译器异常。
我完全困惑了。发生了什么?
>!
函数的惯用方式。也许编译器消息可以/应该改进,但您的根本问题是以这种方式使用“for”没有(clojure)意义。“doseq”完全没问题。 - sw1nnasync/go
块中的fn
吗? - xudifsd