Cnjure中的IFn代表什么?

时间:2016-07-29 15:15:02

标签: java clojure

在Clojure的Java源代码中,我看到了:

import clojure.lang.RT;
import clojure.lang.IFn;

RT似乎代表"运行时" (虽然答案中没有提供官方来源:In the clojure source code, what does RT stand for?

但是IFn代表什么?

2 个答案:

答案 0 :(得分:11)

IFn 表示 nterface F u n ction。 Clojure使用资本"我" Java接口的前缀和" A"用于Java抽象类。

另请参阅IFn JavadocIFn source

答案 1 :(得分:3)

在clojure的术语中,fnifn之间还有一个区别:

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?如果对任何事情都为真,则可以称为函数(如关键字,地图等)