在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
没有这样做的功能?
答案 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