【问题标题】:Clojure UUID - Having trouble creating IDs for defrecordsClojure UUID - 为 defrecords 创建 ID 时遇到问题
【发布时间】:2015-08-15 17:05:54
【问题描述】:

我要做的就是在创建 clojure defrecord 时为其创建一个自动生成的 UUID。我尝试了以下方法:

(ns myns
  (:require [clj-uuid :as uuid])

(defrecord Thing [thing-id name])

(defn create-thing
  [name]
  (map->Thing {:thing-id (uuid/v1)
               :name name}))

接着是:

(repeat 5 (create-thing "bob"))

但是我为我创建的每个Thing 创建了相同 UUID。帮助将不胜感激!

【问题讨论】:

    标签: clojure uuid


    【解决方案1】:

    我对为此使用专用库表示怀疑,因为使用 jvm 附带的内置 UUID 类通过互操作非常容易。

    (ns myns
      (:import (java.util UUID)))
    
    (defrecord Thing [thing-id name])
    
    (defn create-thing
      [name]
      (map->Thing {:thing-id (UUID/randomUUID)
                   :name name}))
    
    ;; using repeatedly instead of repeat generates new values,
    ;; instead of reusing the initial value
    
    (repeatedly 5 #(create-thing "bob"))
    

    【讨论】:

    • 我可以使用内置的,但我仍然遇到同样的问题。似乎与使用(repeat 5 (create-thing "bob")) 有关
    • 问题是repeat - repeat 只评估你的表单一次,你想要(repeatedly 5 #(create-thing "bob"))
    • 哇哦!工作:) 想更新你的答案吗?我会接受的。 (问题不是最大的)。
    • 在这种情况下,我认为更新问题以显示实际代码并在我们处理它时显示意外结果是有意义的。
    • 完成!再次感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多