验证值是否是一组可能值之一的最佳方法是什么?

时间:2015-01-27 00:38:06

标签: clojure

在Clojure中,验证某个值是否是一组可能值之一的惯用方法是什么?

我最初做过这样的事情:

(let [size :grande]
  (make-latte (condp = size
                :tall :tall
                :grande :grande)))

以上内容很有用,因为如果没有符合条件,则抛出IllegalArgumentException

但后来我觉得这样做更舒服:

(let [size :grande]
  (make-latte (or (some #{:tall :grande} [size])
                  (throw (IllegalArgumentException. "I don't know that size")))

这项技术效果很好,因为它允许更多可能的值,例如

(some #{:short :tall :grande :venti} [size])

最好的方法是什么?我是否正确地认为clojure.core没有这样做的功能?

2 个答案:

答案 0 :(得分:9)

(some #{:short :tall :grande :venti} [size])

相当于

(#{:short :tall :grande :venti} size)

那是因为集合是函数。对于通用集合,您可以使用contains?

编辑:如下面的用户1571406所述,请注意contains?测试密钥,而非值。

答案 1 :(得分:0)

您可以在make-latte函数本身中使用前置条件。见https://stackoverflow.com/a/8607359/609639