是否有更好的方法在scala中编写以下代码:
manylinux1
答案 0 :(得分:3)
由于所涉及的条件不同,您的if
/ else
语句链是表达此逻辑的最清晰方法。
您可以使用match
,但这只会使其不清楚。
a match {
case _ if x == 1 || y == 1 || z == 1 => "apple"
case Some(_) => "mango"
case _ => "banana"
}
答案 1 :(得分:2)
您可以玩模式匹配
val res = (x, y, z, a) match {
case (1, _, _, _) | (_, 1, _, _) | (_, _, 1, _) => false
case (_, _, _, a) if a.nonEmpty => false
case _ => None
}
甚至使用提取器对象来定义条件....
object FalseTupleComparison {
def unapply(t: ( Int, Int, Int, A)): Option[Boolean] = Some(t._1 != 1 && t._2 != 1 && t._3 != 1)
}
object EmptyTupleComparison {
def unapply(t: ( Int, Int, Int, A)): Option[Boolean] = Some(t._4.nonEmpty)
}
val res2 = (x, y, z, a) match {
case FalseTupleComparison(res) => res
case EmptyTupleComparison(res) => res
case _ => None
}
答案 2 :(得分:1)
如果支票数量增加,也可以选择:
if (List(x,y,z).contains(1)) "apple"
else if (a.nonEmpty) "mango"
else "banana"