我在学习 clojure.async 图书馆
下面是我的代码。
(ns channels.create (:require [clojure.core.async :refer [ chan >!! <!!]])) (let [c chan] (future (>!! c 42)) (future (println (<!! c))))
当我将上面的命名空间发送到repl时,我得到以下错误-
#对象[clojure.core$future_call$reify__8544 0x3cf627ec {:status:失败, :val#error{:cause“找不到类clojure.core.async.impl.protocols/ReadPort的方法::take!的实现:clojure.care.async$chan”, :通过[{:type java.util.courrent.ExecutionException, :message“java.lang.IllegalArgumentException:找不到类clojure.core.async.impl.protocols/ReadPort的方法::take!的实现:clojure.care.async$chan”, :位于[java.util.concurrent.FutureTask report“FutureTask.java”122]} {:type java.lang.IllegalArgumentException, :message“找不到类clojure.core.async.impl.protocols/ReadPort的方法::take!的实现:clojure/core.async$chan”, :在[clojure.core$_cache_procol_fn invokeStatic“core_deftype.clj”584]}]处, :trace[[clojure.core$_cache_procol_fn invokeStatic“core_deftype.clj”584] [clojure.core$_cache_procol_fn invoke“core_deftype.clj”576] [clojure.core.async.impl.协议$eval1957$fn__1958$G__1948__1965 援引 “protocols.clj” 15] [clojure.core.async$fn__2637 invokeStatic“async.clj”135] [clojure.core.async$fn__2637 invoke“async.clj”127] [channels.create$eval11241$fn__11244 invoke“create.clj”3] [clojure.core$binding_conveyor_fn$fn__5823 invoke“core.clj”2047] [clojure.lang.AFn调用“AFn.java”18] [java.util.concurrent.FutureTask运行$$$capture“FutureTask.java”264] [java.util.concurrent.FutureTask运行“FutureTask.java”-1] [java.util.concurrent.ThreadPoolExecutor runWorker“ThreadPoolExecutor.java”1128] [java.util.concurrent.ThreadPoolExecutor$Worker run“ThreadPoolExecutor.java”628] [java.lang.Thread run“Thread.java”829]]}}]
我的代码中有什么错误?如何修复此错误?
注意:错误并不总是发生,但在4次中有1次是一致发生的。下面是屏幕截图。
chan 是一个函数。 (chan) 是一个通道。
chan
(chan)
关于您的“不一致”编辑:多线程代码是活泼的。REPL有时会在对其进行足够的评估以注意到错误之前查看未来,有时则不会。