Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 790
user2357112 supports Monica Avatar asked Mar 14 '17 23:03

user2357112 supports Monica


1 Answers

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.

like image 134
Michael Zajac Avatar answered Nov 02 '22 03:11

Michael Zajac