Является ли запись 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хорошей практикой или нет?

Есть ли подводные камни в этом подходе?

16
задан mikera 15 August 2012 в 02:52
поделиться