在Clojure的Java源代码中,我看到了:
import clojure.lang.RT;
import clojure.lang.IFn;
RT
似乎代表"运行时" (虽然答案中没有提供官方来源:In the clojure source code, what does RT stand for?)
但是IFn
代表什么?
答案 0 :(得分:11)
IFn 表示我 nterface F u n ction。 Clojure使用资本"我" Java接口的前缀和" A"用于Java抽象类。
答案 1 :(得分:3)
在clojure的术语中,fn
和ifn
之间还有一个区别:
user> (defn f [x] x)
#'user/f
user> (map fn? [f #(list %) :keyword 'sym {:a 10} #{123} [1 2 3] 10 "asd"])
(true true false false false false false false false)
user> (map ifn? [f #(list %) :keyword 'sym {:a 10} #{123} [1 2 3] 10 "asd"])
(true true true true true true true false false)
所以,正如您所看到的,fn?
仅对实际函数有效,而ifn?
如果对任何事情都为真,则可以称为函数(如关键字,地图等)