什么时候语法上有意义?

use*_*ica 7 scala case-sensitive

A/a案例,不是case案例.

显然case a匹配任何东西并将其绑定到名称a,同时case A查找A变量并匹配任何==认为等于的内容A.这让我感到非常惊讶; 虽然我知道Scala区分大小写,但我从未想过标识符案例会影响解析规则.

Scala的语法是否常常关注标识符的情况,或者是否只有少量的上下文发生这种情况?如果只有少数这样的背景,那么它们是什么?我在Google上找不到任何东西; 我得到的只是关于模式匹配的结果.

Mic*_*jac 4

还有一种性质相似,称为类型模式。在类型模式中,以小写字母开头的简单标识符是类型变量,所有其他标识符都尝试匹配实际类型(除了_)。

例如:

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 }
Run Code Online (Sandbox Code Playgroud)

像第一个例子这样的类型匹配不太为人所知,因为它很少被使用。