范围内变量的模式匹配(Scala)

时间:2011-07-19 21:50:48

标签: scala pattern-matching bind

在以下代码中

val x = 5
val y = 4 match {
  case x => true
  case _ => false
}

y为真。 Scala将x解释为模式匹配中的自由变量,而不是将其绑定到范围内具有相同名称的变量。

如何解决这个问题?

2 个答案:

答案 0 :(得分:12)

反引变量表示绑定一个范围变量:

val x = 5
val y = 4 match { case `x` => true; case _ => false }

返回false

或者,如果变量以大写字母开头,则它绑定到范围变量而不进行反引号。

答案 1 :(得分:7)

调用最少惊讶原则,我只会这样做:

val x = 5
val y = 4 match {
  case z if z == x => true
  case _ => false
}