在if和elseif中标量多个条件

时间:2019-03-18 13:47:29

标签: scala

是否有更好的方法在scala中编写以下代码:

manylinux1

3 个答案:

答案 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"