作为改进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)
    

    10-08 14:31