以下是完全有效的 Clojure 代码:
(def a (atom nil))
(def b (atom a))
(reset! a b)
它甚至在需要反向引用的情况下很有用。
然而,在 REPL 中处理这些东西很烦人:每当您键入 a 或 b 时,REPL 都会尝试打印此类引用的内容,并且当然会很快生成堆栈溢出错误。
那么有什么办法可以控制/改变Clojure中atoms/refs/agents的打印行为呢?某种类型的循环检测会很好,但即使完全抑制取消引用的内容也会非常有用。
你可以说
(remove-method print-method clojure.lang.IDeref)
删除对可取消引用对象(原子、引用等)的特殊处理print-method
,使它们像这样打印:
user=> (atom 3)
#<Atom clojure.lang.Atom@5a7baa77>
或者,你可以add抑制打印某些特定引用类型内容的更具体方法:
(defmethod print-method clojure.lang.Atom [a ^java.io.Writer w]
(.write w (str "#<" a ">")))
user=> (atom 3)
#<clojure.lang.Atom@4194e059>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)