我不明白IFn和Fn之间的区别。
你能举个例子吗?
请提供这些功能之间的区别:
(fn? x)
(ifn? x)
他们表现得一样。
Clojure文档非常清楚地描述了差异:
(fn? x)
如果x实现Fn(即是通过fn创建的对象),则返回true。
(ifn? x)
如果x实现IFn,则返回true。请注意,许多数据结构(例如集合和映射)都实现了IFn
您可以对其进行测试:
(fn? (fn [] nil)) ;; => true
(fn? #{}) ;; => false
(fn? {}) ;; => false
(fn? []) ;; => false
(fn? :a) ;; => false
(fn? 'a) ;; => false
(ifn? (fn [] nil)) ;; => true
(ifn? #{}) ;; => true
(ifn? {}) ;; => true
(ifn? []) ;; => true
(ifn? :a) ;; => true
(ifn? 'a) ;; => true
换句话说,fn?
说它的参数是否是仅是一个函数(使用来创建(fn ...)
)ifn?
的对象,说它是否可以像函数一样被调用(即使不是用来创建的(fn ...)
)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句