16
假设我有一个“类似于函数”的记录,至少在它表示可以应用于某些参数的操作的意义上。Clojure记录是否是实施IFn的好习惯?
我可以通过实施clojure.lang.IFn
其作为函数的工作,是这样的:
(defrecord Func [f x]
clojure.lang.IFn
(invoke [this arg]
(f x arg))
(applyTo [this args]
(apply f x args)))
((->Func + 7) 1)
=> 8
(是的,我知道,我刚刚重新实现的partial
劣质版本....这只是一个例子: - ))
正在创纪录的实现clojure.lang.IFn
一个好的做法或不?
任何陷阱,以这种方式?
A记录似乎实现'clojure.lang.Associative'但不是'clojure.lang.IFn'。所以你可以用'(:some-record)'来查找关键字,而不是'(some-record:x)' – mikera 2012-08-15 05:30:06
准确地说。我已经检查过,但没有看到有关Rich的任何明确信息。也许这只是一个疏忽。 – 2012-08-15 05:31:32
给出+1,因为@ mikera的问题询问记录不是类型。因为记录已经有了类似地图的语义,所以会令人困惑,因为类型这个问题不存在。 – ponzao 2012-08-15 08:24:56