gpt4 book ai didi

clojure - 有没有办法以编程方式获取 clojure 特殊表单的集合?

转载 作者:行者123 更新时间:2023-12-04 07:29:34 25 4
gpt4 key购买 nike

是否存在类似的东西?:

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

最佳答案

我不认为有什么好的方法可以做到这一点。

但这里有一个 hack(在最前沿的 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

关于clojure - 有没有办法以编程方式获取 clojure 特殊表单的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3159836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com