我正在查看字符串的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)))
Run Code Online (Sandbox Code Playgroud)
有关 1. 和 2. 的答案,请参阅 djsheldrick 对这个问题的评论。回答3:
首先,虽然这与这里无关,但命名函数可以通过名称引用自身。这允许它们将自己作为值返回或通过通常的调用机制而不是recur顶层调用自己。重要的是,这是生成惰性序列的函数的正确自调用策略;我已经在早期的 SO 答案中探讨了原因(请参阅“如何将递归调用包装在惰性序列中......”块引用之后的部分)。
其次,函数被编译为 JVM 类。如果函数未命名,则类由 Clojure 编译器根据定义函数的命名空间来命名;否则,该名称将用于为该类生成更有意义的名称。这对于调试很有用,因为它使堆栈跟踪更容易理解。