Random clj记录:何时:调用保存之前?

Random clj记录:何时:调用保存之前?,random,clojure,lazy-evaluation,Random,Clojure,Lazy Evaluation,我正在使用rand将字段值指定为:在clj记录中保存函数之前。下面的random str函数用于生成值 (def VALID-CHARS (map char (concat (range 48 58) ; 0-9 (range 65 91) ; A-Z (range 97 123)))) ; a-z (defn random-char [] (nth VALID-CHARS (rand (count VALID-CHARS)))) (defn

我正在使用
rand
将字段值指定为
:在clj记录中保存
函数之前。下面的
random str
函数用于生成值

(def VALID-CHARS
    (map char (concat (range 48 58) ; 0-9
        (range 65 91) ; A-Z
        (range 97 123)))) ; a-z

(defn random-char []
    (nth VALID-CHARS (rand (count VALID-CHARS))))

(defn random-str [length]
    (apply str (take length (repeatedly random-char))))

当我随后使用从clj记录
create
functon返回的映射时,该字段的值与数据库中的值不同。这是否意味着有一些懒惰的评估正在进行?
random str
是否被多次调用?

这听起来像是clj记录的问题

在clojure中,只有使用惰性序列,或使用。
否则,clojure是一种经过严格/热切评估的语言。

psst。这是我的怀疑。我不明白为什么兰德会被评估多次,除非在clj记录中有原子或引用在使用。事务中涉及的函数不应该有副作用,而且兰德有状态,所以我想我会把它归结为经验。