我正在尝试检查关键字是否是 UUID。它应该看起来像这样(这不起作用):
{:70342332-7f99-417a-b864-9006de62ae05 {:a 1 b: 2}} => (just {uuid? {:a 1 :b 2}})
还有什么其他方法可以测试它?
使用 Midje 1.9。
归档所需内容的一种干净方法是:
(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"
请注意,这不是:70342332-7f99-417a-b864-9006de62ae05
UUID ,而是关键字。更一般地说,关键字在 Clojure 中就是一个关键字,仅此而已,无论字符串是什么样的。
实现您想要的一种方法是获取name
关键字,然后将此字符串显式读取为 UUID:
user=> (uuid? (read-string (str "#uuid \"" (name :70342332-7f99-417a-b864-9006de62ae05) "\"")))
true
然后,您可以使用这种方法编写自己的 Midje 检查器。