2

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

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

还有什么其他方法可以测试它?

使用 Midje 1.9。

4

2 回答 2

2

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

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

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

user=> (keyword->uuid :dasdsa)
nil
user=> (keyword->uuid :70342332-7f99-417a-b864-9006de62ae05)
#uuid "70342332-7f99-417a-b864-9006de62ae05"
于 2018-08-27T04:31:35.827 回答
-1

请注意,这不是:70342332-7f99-417a-b864-9006de62ae05UUID ,而是关键字。更一般地说,关键字在 Clojure 中就是一个关键字,仅此而已,无论字符串是什么样的。

实现您想要的一种方法是获取name关键字,然后将此字符串显式读取为 UUID:

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

然后,您可以使用这种方法编写自己的 Midje 检查器。

于 2018-08-25T09:07:08.927 回答