【问题标题】:What are all of clojure's special forms?clojure 的所有特殊形式是什么?
【发布时间】:2015-09-06 00:01:28
【问题描述】:

作为改进 Cider 调试器的一部分,我需要对所有可能的特殊形式实施特殊处理。换句话说,我需要知道所有满足special-symbol? 的符号。 Special Forms 上的文档页面虽然很有帮助,但并未提供所有这些。

例如,经过一些实验,我了解到

  1. 那里列出的大多数表单都有一个* 对应项(例如let* 和loop*)。
  2. 有一个 clojure.core/import* 特殊符号(如果不是幸运的话,我不会找到它)。

是否有所有特殊符号的完整列表?
或者,有没有办法列出所有的实习符号?如果是这样,那么我可以过滤special-symbol?。

【问题讨论】:

    标签: clojure symbols


    【解决方案1】:

    查看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)
    

    【讨论】:

    • 该死,现在我很尴尬。忘记使用源代码。
    猜你喜欢
    • 1970-01-01
    • 2015-11-22
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    相关资源
    最近更新 更多