Clojure并发编程:Vars、Pmap与Core.async的应用
1. 动态绑定与Var根的修改
1.1 动态绑定与线程
可以使用 bound-fn 将当前所有绑定传递到新线程,示例代码如下:
(.start (Thread. (bound-fn [] (.write *out* "prints to repl from thread"))))
let 绑定会捕获 *out* ,这样就可以在子线程中重新绑定它。需要注意的是,绑定不会传递给手动创建的线程,但会传递给 futures ,这称为绑定传递。
1.2 修改Var根
创建新的var时,提供的初始值就是它的根。例如:
(def power-source "hair")
这里, "hair" 是 power-source 的根值。可以使用 alter-var-root 函数永久更改这个根值:
(alter-var-root #'power-source (fn [_] "7-eleven parking lot"))
power-source
; => "7-e
Clojure并发编程:Vars、Pmap与Core.async应用
超级会员免费看
订阅专栏 解锁全文
29

被折叠的 条评论
为什么被折叠?



