2
A
回答
13
Clojure的文档描述了差异很清楚:
(fn? x)
返回true如果x实现FN,即是通过FN创建的对象。
(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 ...)
创建的)。
+1
请注意,'IFn'是一个适当的接口,其特征在于许多'apply'方法。但'Fn'是一个空接口:它可以作为一种标签附加到任何类。 – Thumbnail
相关问题
- 1. Clojure中with-redefs和with-redefs-fn有什么区别?
- 2. Rust中的extern fn和extern“C”fn有什么区别?
- 3. Clojure中的IFn代表什么?
- 4. clojure和clojurescript的区别?
- 5. 的Clojure:整数无法投射到IFN
- 6. Clojure中#^ {...}和^ {...}元数据的区别?
- 7. javascript obj.onclick和prototype的Event.observe(obj,'click',fn)有什么区别?
- 8. 限制使用一个的Clojure的FN
- 9. Clojure协议和Groovy类别之间的区别
- 10. 的Clojure,试图调用未FN
- 11. Clojure记录是否是实施IFn的好习惯?
- 12. Lisp/Clojure中的procedure和#程序有什么区别?
- 13. JSP中LENGTH与fn:长度(...)之间的区别EL
- 14. Clojure的#lambda marco并不总是和(fn)一样?
- 15. 在Lisp(Clojure,Emacs Lisp)中,list和quote有什么区别?
- 16. 加载(fn)和就绪(fn)
- 17. Clojure:如何实现特殊形式,函数和宏的区别
- 18. Clojure在使用和需求之间的区别
- 19. 使用Clojure中的let/fn匹配参数
- 20. 区别! !和= JavaScript中
- 21. Clojure中点运算符和完全合格的命名调用的区别
- 22. C++中“::”“。”和“ - >”的区别
- 23. vim中$和g_的区别?
- 24. Perl中“@”和“$”的区别
- 25. SQL中'AND'和'&&'的区别
- 26. LIKE和= MYSQL中的区别?
- 27. JSP中eq和==的区别
- 28. javascript中+ =和= +的区别
- 29. Haskell中==和=的区别
- 30. Clojure Enlive:如何简化这个从scrape3.clj中提取fn
请告诉我们您对'IFn'和'fn'的理解以及您不清楚什么,所以我们知道需要澄清的事项。 –
@PiotrekBzdyl(fn?x)和(ifn?x)函数表现相同(近似) –