如何检查 Clojure 中的某个东西是否是 Atom?

Wal*_*ner 3 clojure

我在寻找的迂腐的方式来测试是否东西是原子或没有,如(atom? ...)Clojure中的谓语,类似家庭(number? ...)(string? ...)(vector? ...),等。

鉴于 Atoms 是 Clojure 的主要语言特性,使用 . 创建(atom ...),我必须编写自己的自定义函数来测试内部实现类,这感觉是错误的。例如,

(defn atom? [a] (= (type a) clojure.lang.Atom))
Run Code Online (Sandbox Code Playgroud)

我缺少更正确的范例或内置语言功能吗?


注意:这个问题与 Scheme 的“原子”无关,也不相同(atom? ...),它们是非空 cos 对。

Sea*_*eld 12

我会使用(instance? clojure.lang.Atom a)甚至不费心编写谓词。

我还要提醒的是,如果您觉得需要编写以运行时对象类型为条件的代码,您可能需要退后一步,想出一种不同的方法来解决问题:也许是协议或多方法会让你以更惯用的方式调度对象类型吗?