如何在Clojure中测试密钥是否为UUID

时间:2018-08-25 01:34:16

标签: clojure uuid midje

我正在尝试检查关键字是否为UUID。它应该看起来像这样(不起作用):

{:70342332-7f99-417a-b864-9006de62ae05 {:a 1 b: 2}} => (just {uuid? {:a 1 :b 2}})

还有哪些其他测试方法?

使用Midje 1.9。

2 个答案:

答案 0 :(得分:1)

一种归档所需内容的干净方法是:

(defn keyword->uuid [kw]
     (try
      (java.util.UUID/fromString (name kw))
     (catch Exception e nil)))

如果关键字可转换为uuid对象,它将被转换并返回(请注意,任何非null返回值都是true,因此您可以将此函数用作转换器和测试)。否则结果将为零:

user=> (keyword->uuid :dasdsa)
nil
user=> (keyword->uuid :70342332-7f99-417a-b864-9006de62ae05)
#uuid "70342332-7f99-417a-b864-9006de62ae05"

答案 1 :(得分:0)

请注意,:70342332-7f99-417a-b864-9006de62ae05不是UUID,而是关键字。更笼统地说,关键字在Clojure中是一个关键字,除此之外,无论字符串是什么样子,都是如此。

一种实现所需目标的方法是采用关键字name,然后以UUID的形式显式读取此字符串:

user=> (uuid? (read-string (str "#uuid \"" (name :70342332-7f99-417a-b864-9006de62ae05) "\"")))
true

然后您可以使用这种方法write your own Midje checker