clojure 的所有特殊形式是什么?
What are all of clojure's special forms?
作为改进 Cider 调试器的一部分,我需要对所有可能的特殊形式实施特殊处理。换句话说,我需要知道所有满足 special-symbol?
的符号。
Special Forms 上的文档页面虽然很有帮助,但并未提供所有内容。
例如,经过一些实验,我了解到
- 那里列出的大多数形式都有
*
对应形式(例如 let*
和 loop*
)。
- 有一个
clojure.core/import*
特殊符号(如果不是运气好我是找不到的)。
是否有所有特殊符号的完整列表?
或者,有没有办法列出所有 interned 符号?如果是这样,那么我可以过滤 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)
作为改进 Cider 调试器的一部分,我需要对所有可能的特殊形式实施特殊处理。换句话说,我需要知道所有满足 special-symbol?
的符号。
Special Forms 上的文档页面虽然很有帮助,但并未提供所有内容。
例如,经过一些实验,我了解到
- 那里列出的大多数形式都有
*
对应形式(例如let*
和loop*
)。 - 有一个
clojure.core/import*
特殊符号(如果不是运气好我是找不到的)。
是否有所有特殊符号的完整列表?
或者,有没有办法列出所有 interned 符号?如果是这样,那么我可以过滤 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)