When is case syntactically significant?

A/a case, not case case.

Apparently case a matches anything and binds it to the name a , while case A looks for an A variable and matches anything == considers equal to A . This came as quite a surprise to me; while I know Scala is case sensitive, I never expected identifier case to affect the parsing rules.

Is it common for Scala's syntax to care about the case of identifiers, or is there only a small number of contexts in which this happens? If there's only a small number of such contexts, what are they? I couldn't find anything on Google; all I got were results about pattern matching.


There is one more that is similar in nature, called a type pattern. In a type pattern, a simple identifier that starts with a lower case letter is a type variable, and all others are attempt to match actual types (except _ ).

For example:

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 }

Type matching like the the first example is lesser-known because, well, it's hardly used.

链接地址: http://www.djcxy.com/p/95606.html

上一篇: 保存时,VS2017需要很长时间重新编译打字稿

下一篇: 大小写的语法意义何时?