Как проверить, является ли ключ UUID в clojure - PullRequest
0 голосов
/ 25 августа 2018

Я пытаюсь проверить, является ли ключевое слово UUID.Это должно выглядеть так (что не работает):

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

Какие еще способы проверить это?

Использование Midje 1.9.

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Чистый способ архивировать то, что вам нужно, это:

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

Если ключевое слово может быть преобразовано в объект uuid, оно будет преобразовано и возвращено (обратите внимание, что любое ненулевое возвращаемое значение истинно, поэтомуВы можете использовать эту функцию как в качестве преобразователя, так и в качестве теста).В противном случае результат будет равен нулю:

user=> (keyword->uuid :dasdsa)
nil
user=> (keyword->uuid :70342332-7f99-417a-b864-9006de62ae05)
#uuid "70342332-7f99-417a-b864-9006de62ae05"
0 голосов
/ 25 августа 2018

Обратите внимание, что :70342332-7f99-417a-b864-9006de62ae05 - это , а не - это UUID, это ключевое слово.Говоря в общем, ключевое слово в Clojure - это ключевое слово, и ничто иное, независимо от того, как выглядит строка символов.

Один из способов добиться того, что вы хотите - это взять name ключевого слова, а затемпрочитайте эту строку явно как UUID:

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

Затем вы можете написать свою собственную проверку Midje , используя этот подход.

...