一个案例,不是 case
案子。
显然 case a
匹配任何内容并将其绑定(bind)到名称 a
, 而 case A
寻找 A
变量并匹配任何内容==
认为等于 A
.这让我很惊讶。虽然我知道 Scala 区分大小写,但我从没想过标识符大小写会影响解析规则。
Scala 的语法关心标识符的大小写是否很常见,还是只有少数上下文会发生这种情况?如果只有少数这样的上下文,它们是什么?我在谷歌上找不到任何东西;我得到的只是关于模式匹配的结果。
最佳答案
还有一个性质相似的,称为 type pattern .在类型模式中,以小写字母开头的简单标识符是类型变量,所有其他标识符都尝试匹配实际类型(_
除外)。
例如:
val a: Any = List(1, 2, 3)
val c = 1
// z is a type variable
a match { case b: List[z] => a }
// Type match on `Int`
a match { case b: List[Int] => a }
// type match on the singleton c.type (not a simple lower case identifier)
// (doesn't actually compile because c.type will never conform)
a match { case b: List[c.type] => a }
像第一个示例这样的类型匹配鲜为人知,因为它几乎不被使用。
关于scala - 什么时候大小写在语法上很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42798498/