如何测试符号是指向特殊形式还是宏

时间:2016-03-01 22:49:41

标签: clojure

我需要一个可以判断符号是指向特殊形式还是宏的函数。

我在clojure.test命名空间中找到了function?函数,因此可以使用它,但我对使用它感到犹豫,因为它似乎只是出于测试目的。可以将它用于普通代码吗?如果没有,我怎样才能实现目标。

如上所述,评论fn?不起作用,因为它只适用于函数本身,而不适用于指向它们的符号。

2 个答案:

答案 0 :(得分:1)

如果它符合您的要求,请使用它。它在clojure.test中,因为它不会对非测试代码有用,但如果它是您特定用例的最佳函数,那么就没有理由因为函数的位置而妨碍自己。换句话说,clojure.test与组织的clojure.core是分开的,而不是因为它只能用于测试。

答案 1 :(得分:-1)

你可以找到所有特殊形式,: - )

(defn special-symbol?
  [s]
  (contains? (. clojure.lang.Compiler specials) s))