Хорошая практика для записи Clojure для реализации IFn? - программирование

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

Любые подводные камни к этому подходу?

4b9b3361

Ответ 1

Я удивлен, что этого еще нет. Предполагается, что записи "полная реализация постоянной карты" . Поэтому, чтобы ответить на ваш вопрос, я ожидаю, что это будет функция его ключей, как карта; все остальное было бы удивительно.