Clojure 关于字符串来源的问题?

Clojure 关于字符串来源的问题?,clojure,Clojure,我在看字符串的src?fn并提出了一些问题。下面是字符串的来源?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))) 给出fn静态元数据有什么作用 为什么静态元数据被给出了两次,为fn或var指定它是否足够 为什么匿名fn有名字 关于1

我在看字符串的src?fn并提出了一些问题。下面是
字符串的来源?
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)))
  • 给出fn静态元数据有什么作用
  • 为什么静态元数据被给出了两次,为fn或var指定它是否足够
  • 为什么匿名fn有名字

  • 关于1的答案。参见d.j.sheldrick对该问题的评论。对第3条的答复:

    首先,尽管这与本文无关,但命名函数可以通过名称来引用它们自己。这允许它们以值的形式返回自己,或者通过通常的调用机制调用自己,而不是
    返回到顶部。重要的是,这是生成惰性seq的函数的正确自调用策略;我已经讨论了原因(请参阅“为什么可以在惰性序列中包装递归调用…”块引号后的部分)

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

    1。答案如下: