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

pes*_*lla 1 clojure

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

Die*_*sch 9

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

相当于

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

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

编辑:如下面的user1571406说明,请注意contains?测试键,而不是值.