gpt4 book ai didi

clojure - Clojure 中 IFn 和 Fn 的区别

转载 作者:行者123 更新时间:2023-12-02 12:29:59 25 4
gpt4 key购买 nike

我无法理解 IFn 和 fn 之间的区别。

你能举个例子吗?

请提供这些函数之间的差异:

(fn? x)

(ifn? x)

他们的行为是一样的。

最佳答案

Clojure 文档非常清楚地描述了差异:

(fn? x) Returns true if x implements Fn, i.e. is an object created via fn.

(ifn? x) Returns true if x implements IFn. Note that many data structures (e.g. sets and maps) implement 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 ...) 创建的)。

关于clojure - Clojure 中 IFn 和 Fn 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36622234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com