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

ron*_*ron 5 scala bind pattern-matching

在以下代码中

val x = 5
val y = 4 match {
  case x => true
  case _ => false
}
Run Code Online (Sandbox Code Playgroud)

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

如何解决这个问题呢?

ron*_*ron 12

对变量进行反斜杠表示绑定一个范围变量:

val x = 5
val y = 4 match { case `x` => true; case _ => false }
Run Code Online (Sandbox Code Playgroud)

回报false.

或者,如果变量以大写字母开头,则它绑定到范围变量而不进行反向操作.


par*_*tic 7

援引最不惊讶的原则,我将简单地做:

val x = 5
val y = 4 match {
  case z if z == x => true
  case _ => false
}
Run Code Online (Sandbox Code Playgroud)