かなり頻繁に私は次のようなコードを持っています
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()バージョンの方が好きですが、パターンマッチングに固執するのが最善だと思います。これは、より標準的で慣用的なものです...