作用域中变量的模式匹配(Scala)

作用域中变量的模式匹配(Scala),scala,pattern-matching,bind,Scala,Pattern Matching,Bind,在下面的代码中 val x = 5 val y = 4 match { case x => true case _ => false } 值y为真。Scala将x解释为模式匹配中的自由变量,而不是将其绑定到范围中具有相同名称的变量 如何解决此问题?反勾选变量表示要绑定一个作用域变量: val x = 5 val y = 4 match { case `x` => true; case _ => false } 返回false 或者,如果一个变量以大写字母开头,

在下面的代码中

val x = 5
val y = 4 match {
  case x => true
  case _ => false
}
y
为真。Scala将
x
解释为模式匹配中的自由变量,而不是将其绑定到范围中具有相同名称的变量


如何解决此问题?

反勾选变量表示要绑定一个作用域变量:

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

或者,如果一个变量以大写字母开头,它将绑定到一个范围内的变量,而不进行反勾选。

调用最小惊奇原则,我只需执行以下操作:

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

另请参见为什么重复现有问题,然后自己回答@dhg:我在网上找不到这个问题,这就是为什么。我回答我自己的问题,因为我更喜欢使用SO作为知识库,而不是在我隐藏的小博客上记笔记或写一篇思想文章。谢谢你的链接,我同意用副本结束。Ron的答案是好的,你可以添加一个可以直接匹配模式的条件。(否决票)我认为情况也一样快,记住最不令人惊讶的原则。(向上投票)