任何人都可以解释此代码段的行为:
def test = {
val xt: Option[String] = Some("1")
val xx: String = "2"
xt match {
case Some(xx) => println("match")
case _ => println("no match")
}
xt match {
case Some("2") => println("match")
case _ => println("no match")
}
}
结果
match
noMatch
为什么在更改字符串文字的val时有区别?
答案 0 :(得分:6)
表达式case Some(xx)
与范围内的xx
的值不匹配,而是匹配任何并将结果绑定到名为{{的新变量1}},遮蔽外部定义。
如果要与现有变量匹配,请使用反引号:
xx
或将变量重命名为以大写字母开头:
def test = {
val xt: Option[String] = Some("1")
val xx: String = "2"
xt match {
case Some(`xx`) => println("match")
case _ => println("no match")
}
xt match {
case Some("2") => println("match")
case _ => println("no match")
}
}
编辑:这在Scala语言规范中的§8.1.5中定义为Stable Identifier Pattern