Clojure记录实施IFn是一种好习惯吗?

mik*_*era 16 functional-programming function record clojure

假设我有一个"类似函数"的记录,至少在某种意义上它表示可以应用于某些参数的操作.

通过实现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
Run Code Online (Sandbox Code Playgroud)

(是的,我知道我刚刚重新实现了partial...... 的劣质版本......这只是一个例子:-))

制作唱片clojure.lang.IFn的好习惯吗?

这种方法有任何陷阱吗?

Ale*_*art 6

我很惊讶它还没有.记录应该是"持久性地图的完整实现".所以要回答你的问题,我希望它是一个函数的关键,因为地图是; 其他任何事情都会令人惊讶.