2012-08-15 62 views
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一個好的做法或不?

任何陷阱,以這種方式?

回答

6

我很驚訝,它沒有了。記錄應該是"a complete implementation of a persistent map"。所以要回答你的問題,我希望它是它的關鍵功能,就像地圖一樣;其他任何事情都會令人驚訝。

+1

A記錄似乎實現'clojure.lang.Associative'但不是'clojure.lang.IFn'。所以你可以用'(:some-record)'來查找關鍵字,而不是'(some-record:x)' – mikera 2012-08-15 05:30:06

+0

準確地說。我已經檢查過,但沒有看到有關Rich的任何明確信息。也許這只是一個疏忽。 – 2012-08-15 05:31:32

+0

給出+1,因爲@ mikera的問題詢問記錄不是類型。因爲記錄已經有了類似地圖的語義,所以會令人困惑,因爲類型這個問題不存在。 – ponzao 2012-08-15 08:24:56

相關問題