Предположим, у меня есть запись, которая «подобна функции -», по крайней мере, в том смысле, что она представляет собой операцию, которую можно применить к некоторым аргументам.
Я могу заставить его работать как функцию, реализуя 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
хорошей практикой или нет?
Есть ли подводные камни в этом подходе?