关于字符串来源的问题?

时间:2013-04-11 07:24:17

标签: clojure

我正在查看字符串的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)))
  1. 给fn静态元数据做了什么?
  2. 为什么静态元数据被给出两次,不足以为fn或var指定它吗?
  3. 为什么匿名fn有名字?

1 个答案:

答案 0 :(得分:4)

有关1.和2.的答案,请参阅d.j.sheldrick对该问题的评论。回答3。:

首先,虽然这与此无关,但命名函数可以通过其名称引用自己。这允许他们将自己作为值返回,或者通过通常的调用机制调用自己,而不是recur到顶部。重要的是,这是生成惰性seqs的函数的正确自调用策略;我已经了解了为什么in an earlier SO answer的原因(参见“你怎么能以懒惰的顺序包装递归调用......”块引用之后的部分。)

其次,函数被编译为JVM类。这些类由Clojure编译器基于命名空间命名,如果该函数未命名,则在该命名空间中定义该函数。否则该名称用于为类生成更有意义的名称。这对于调试很有用,因为它使堆栈跟踪更容易理解。