2 つのオブジェクト (この場合はレコード) が定義されているとします。
(defrecord rec1 [one two])
(defrecord rec2 [one two])
そして、これらの2つのレコードが(インスタンス化されていない)リストにあります:
(def recs [rec1 rec2])
リスト内のこれら 2 つのレコードをインスタンス化する最良の方法は?
以下は例外を与える
(map (fn [rec] (rec. 1 2)) recs)
new とドット コンストラクターはクラス名シンボルを想定しているためです。では、これについて最善の方法は何ですか?これまでのところ、リフレクションが唯一の方法のようです。
(map #(clojure.lang.Reflector/invokeConstructor % (to-array [1 2 3])) recs)
これは、オブジェクトでコンストラクターを呼び出すという一見単純なタスクを実行するための、非常に醜い (そして遅い) 方法のように思えます。それでは、正しい(または慣用的な)方法は何ですか?