У меня есть простое определение записи, например
(defrecord User [name email place])
Каков наилучший способ сделать запись со значениями в последовательности
(def my-values ["John" "[email protected]" "Dreamland"])
Я надеялся на что-то вроде
(apply User. my-values)
но это не сработает. В итоге я сделал:
(defn make-user [v]
(User. (nth v 0) (nth v 1) (nth v 2)))
Но я чувствую, что есть лучший способ добиться этого...
instantiate
получает буквальную последовательность значений. Например.(def vals ["John" "[email protected]" "Dreamland"])
, за которым следует(instantiate User vals)
, не будет работать. Плюс нельзя использовать макрос сapply
. 23.12.2010(defn instantiate [klass values] (eval (read-string (str "(new " (.getName klass) " " (let [s (str values)] (subs s 1 (- (.length s) 1))) ")"))))
22.01.2011