Clojure对多线程状态使用ref和alter
我试图做一些琐碎的事情,使用代理计算一些东西,如果最终代理值小于某个ref变量,则更新ref变量 我无法找到将ref变量更新为“swap”的方法Clojure对多线程状态使用ref和alter,clojure,Clojure,我试图做一些琐碎的事情,使用代理计算一些东西,如果最终代理值小于某个ref变量,则更新ref变量 我无法找到将ref变量更新为“swap”的方法 (定义最短(参考[1 2 3 4 5]) (def var1(参考[1 2 3]])) (def传输[avar] (dosync) (如果(
(定义最短(参考[1 2 3 4 5])
(def var1(参考[1 2 3]]))
(def传输[avar]
(dosync)
(如果(<(计数变量1)(计数最短)
(alter shortest@avar);或任何合适的!
)
)
)
我认为swap!可以工作,但这仅适用于atom。(我不确定它是否可以工作)如果您只想在ref中输入一个值,那么它很有用
user> (def shortest (ref [1 2 3 4 5]))
#'user/shortest
user> (def var1 (ref [1 2 3]))
#'user/var1
函数需要defn
而不是def
:
user> (defn transfer [avar]
(dosync
(if (< (count @avar) (count @shortest)) ;; use @ to use the value in the ref
(ref-set shortest @avar)))) ;; did you intend to use avar here?
#'user/transfer
如果您只想在ref中输入一个值,则此函数非常有用
user> (def shortest (ref [1 2 3 4 5]))
#'user/shortest
user> (def var1 (ref [1 2 3]))
#'user/var1
函数需要defn
而不是def
:
user> (defn transfer [avar]
(dosync
(if (< (count @avar) (count @shortest)) ;; use @ to use the value in the ref
(ref-set shortest @avar)))) ;; did you intend to use avar here?
#'user/transfer
如果您只想在ref中输入一个值,则此函数非常有用
user> (def shortest (ref [1 2 3 4 5]))
#'user/shortest
user> (def var1 (ref [1 2 3]))
#'user/var1
函数需要defn
而不是def
:
user> (defn transfer [avar]
(dosync
(if (< (count @avar) (count @shortest)) ;; use @ to use the value in the ref
(ref-set shortest @avar)))) ;; did you intend to use avar here?
#'user/transfer
如果您只想在ref中输入一个值,则此函数非常有用
user> (def shortest (ref [1 2 3 4 5]))
#'user/shortest
user> (def var1 (ref [1 2 3]))
#'user/var1
函数需要defn
而不是def
:
user> (defn transfer [avar]
(dosync
(if (< (count @avar) (count @shortest)) ;; use @ to use the value in the ref
(ref-set shortest @avar)))) ;; did you intend to use avar here?
#'user/transfer