我经常有如下代码
if (operator == Equal || operator == Missing || operator == Unknown) {
为了使它不那么冗长并且更具可读性,有时我会发出:
if (List(Equal, Missing, Unknown).contains(operator)) {
我知道我也可以像这样发出模式匹配
operator match {
case Equal | Missing | Unknown => {
这带来了另一个层次的嵌套括号
我想知道是否有某种方法
if (operator.isOneOf(List(Equal, Missing, Unknown))) {
--
编辑:
展示如何使用此处出现的不同选项:
使用 Set 作为函数
if (Set(1, 2, 3)(3)) {
"Gotcha"
} else {
"no luck..."
}
使用 PartialFunction.cond
import PartialFunction.cond
if (cond(3) { case 1 | 2 | 3 => true }) {
"Gotcha"
} else {
"no luck..."
}
实现 isOneOf
class ComparableWithIsOneOf[T](val value: T) {
def isOneOf(values: T*): Boolean = {
values.contains(value)
}
}
object Comparison {
object implicits {
implicit def AnyToComparableWithIsOneOf[T](value: T): ComparableWithIsOneOf[T] = {
return new ComparableWithIsOneOf(value)
}
}
}
import Comparison.implicits._
if (3.isOneOf(1, 2, 3)) {
"Gotcha"
} else {
"no luck..."
}
最后我更喜欢 Set() 版本,但我认为最好是坚持模式匹配,更标准和惯用......