是否存在类似的东西?:

(deftest fantasy
   (is (= ["let" "def" "ns" "etc."] clojure.core/special-chars)))
有帮助吗?

解决方案

我认为没有一个好方法可以做到。

但这是一个黑客(在出血边缘1.2快照上运行):

user> (map (comp name first) (seq clojure.lang.Compiler/specials))
("deftype*" "new" "quote" "&" "var" "set!" 
 "monitor-enter" "recur" "." "case*" "import*" 
 "reify*" "do" "fn*" "throw" "monitor-exit" "letfn*" 
 "finally" "let*" "loop*" "try" "catch" "if" "def")

这取决于编译器的实施详细信息。请不要在生产代码中使用它。

注意 let 被认为是一种特殊的形式,即使它确实是一个普通的宏和 let* 是实际的特殊形式。与 fn 和别的。这些可能是实施细节,如将来的变化。

因此,如果您真的想要特殊表格的列表,我建议您自己键入列表。列表足够简短(所有内容都列出 http://clojure.org/special_forms)。查看来源 clojure.core/special-form-anchor, ,那里有一个硬编码列表可以复制/粘贴。 (再次可能不依赖实施细节。)

#{'. 'def 'do 'fn 'if 'let 'loop 'monitor-enter 'monitor-exit 'new 'quote 'recur 'set! 'throw 'try 'var}

还有这样的:

user> (clojure.core/special-symbol? 'if)
true
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top