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