【发布时间】:2019-01-23 15:58:06
【问题描述】:
让假设,我有变种原子-VAR P>
(def atom-val (atom []))
还假设原子的标准行为:
(swap! atom-val conj {:b "2"})
=> #object[clojure.lang.Atom 0x6500d3fd {:status :ready, :val [{:a "2"}]
(@atom-val)
=> #object[clojure.lang.Atom 0x6500d3fd {:status :ready, :val [{:a "2"}]
我要创建相同的行为,因为它会与零的目标工作,但没有行动: P>
(def atom-val nil)
(swap! atom-val conj "New val")
当然,我会得到一个NullPointerException。但我想什么都没有发生,剿它。我不需要写尝试每一次,我只需要描述behavuiour。 P>
我看到的交换的是一个函数,原子 EM>是一个函数,返回原子 clojure.lang.IAtom EM>,clojure.lang。 IAtom是一个接口。我不能扩展接口。
我怎样才能描述的行为? P>
好,我有一个全球性的动态变量,其等于零 P>
每当一个线程被创建(它与环的Compojure处理程序),我绑定原子-VAL到 P>
所以,我有在不同的功能这样的形式: 我随处运行了很多次(内/外不同的功能)。这是非常糟糕的检查每一个时间是否原子-VAL STRONG>为空或不是。功能的有无以使交换的,但有时原子-VAL EM>不能被正确初始化(当一个函数使得交换!外侧环处理程序,结合前)。 所以我决定做这样说:我想延长的交换 em>的协议为Atom和为零时(当(def ^:dynamic atom-val nil).
(defn func [handler]
(fn [request]
(binding [atom-val (atom [])]
(handler request)
)
)
(swap! atom-val conj "New val").
atom-val中的无 em>的)传递!它必须不抛出NullPointerException。
【问题讨论】:
-
一个可以询问什么是这种替代的目的是什么?跨度>
标签: clojure