在Clojure中,验证值是否是一组可能值之一的惯用方法是什么?
我最初做了这样的事情:
(let [size :grande]
(make-latte (condp = size
:tall :tall
:grande :grande)))
Run Code Online (Sandbox Code Playgroud)
以上是有用的,因为如果没有子句匹配IllegalArgumentException则抛出.
但后来我发现这样做更舒服:
(let [size :grande]
(make-latte (or (some #{:tall :grande} [size])
(throw (IllegalArgumentException. "I don't know that size")))
Run Code Online (Sandbox Code Playgroud)
这种技术很有效,因为它允许更多可能的值,例如
(some #{:short :tall :grande :venti} [size])
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?我是否认为clojure.core没有这样做的功能?
(some #{:short :tall :grande :venti} [size])
相当于
(#{:short :tall :grande :venti} size)
那是因为集合是函数.对于通用集合,您可以使用contains?.
编辑:如下面的user1571406说明,请注意contains?测试键,而不是值.