作为改进Cider调试器的一部分,我需要对所有可能的特殊形式实现特殊处理。为了单词,我需要知道所有满足special-symbol?
的符号。
Special Forms上的文档页面虽然很有帮助,但并未提供所有功能。
例如,经过一些实验,我了解到
*
对应项(例如let*
和loop*
)。 clojure.core/import*
特殊符号(如果不是纯粹的运气,我不会找到的)。 是否有所有特殊符号的完整列表?
或者,有没有办法列出所有被屏蔽的符号?如果是这样,那么我可以过滤
special-symbol?
。 最佳答案
查看special-symbol?
的定义提供了一个重要线索:
(defn special-symbol?
"Returns true if s names a special form"
{:added "1.0"
:static true}
[s]
(contains? (. clojure.lang.Compiler specials) s))
因此:
user=> (pprint (keys (. clojure.lang.Compiler specials)))
(&
monitor-exit
case*
try
reify*
finally
loop*
do
letfn*
if
clojure.core/import*
new
deftype*
let*
fn*
recur
set!
.
var
quote
catch
throw
monitor-enter
def)