1
既然我已經定義(在這種情況下記錄)兩個對象:如何創建記錄的新實例?
(defrecord rec1 [one two])
(defrecord rec2 [one two])
,我在列表中有(uninstanciated)這兩個記錄:
(def recs [rec1 rec2])
如何是最好的方式將這兩個記錄列入清單?
下面給出了一個例外
(map (fn [rec] (rec. 1 2)) recs)
,因爲新的點構造函數需要一個類名符號。那麼最好的辦法是什麼呢?到目前爲止,反射似乎是唯一的出路:
(map #(clojure.lang.Reflector/invokeConstructor % (to-array [1 2 3])) recs)
這似乎只是一個過於醜陋(慢)的方式來進行調用對象的構造看似簡單的任務。那麼什麼是正確的(或慣用的)方式?