我正在查看字符串的src? fn并有几个问题。以下是string?
fn -
(def
^{:arglists '([x])
:doc "Return true if x is a String"
:added "1.0"
:static true}
string? (fn ^:static string? [x] (instance? String x)))
答案 0 :(得分:4)
有关1.和2.的答案,请参阅d.j.sheldrick对该问题的评论。回答3。:
首先,虽然这与此无关,但命名函数可以通过其名称引用自己。这允许他们将自己作为值返回,或者通过通常的调用机制调用自己,而不是recur
到顶部。重要的是,这是生成惰性seqs的函数的正确自调用策略;我已经了解了为什么in an earlier SO answer的原因(参见“你怎么能以懒惰的顺序包装递归调用......”块引用之后的部分。)
其次,函数被编译为JVM类。这些类由Clojure编译器基于命名空间命名,如果该函数未命名,则在该命名空间中定义该函数。否则该名称用于为类生成更有意义的名称。这对于调试很有用,因为它使堆栈跟踪更容易理解。