2011-07-28 26 views
1

我使用rand來指定一個字段值作爲:before-save函數clj-record。下面的random-str函數用於生成該值。clj-record:什麼時候是:before-save叫?

(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被多次調用?

+0

psst。 (defn random-char [](rand-n VALID-CHARS)) –

回答

0

這聽起來像是clj-record的問題。

只有在惰性序列或delays中才能獲得clojure的懶惰。否則,clojure是一種嚴格/熱切評估的語言。

+0

這是我的懷疑。我不明白爲什麼rand會被評估超過一次,除非在clj-record中使用原子或引用。交易中涉及的功能不應該有副作用,蘭特有狀態,所以我想我會放下去體驗。 – edoloughlin

相關問題