Joh*_*ins 6 scala pattern-matching
为什么我可以使用小写字母作为名称:
val (a, bC) = (1, 2)
(1, 2) match {
case (a, bC) => ???
}
Run Code Online (Sandbox Code Playgroud)
并且不能使用大写字母:
/* compile errors: not found: value A, BC */
val (A, BC) = (1, 2)
/* compile errors: not found: value A, BC */
(1, 2) match {
case (A, BC) => ???
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 scala-2.11.17
因为Scala的设计者更喜欢允许以大写字母开头的标识符这样使用(并且允许两者都会令人困惑):
val A = 1
2 match {
case A => true
case _ => false
} // returns false, because 2 != A
Run Code Online (Sandbox Code Playgroud)
请注意,小写你会得到
val a = 1
2 match {
case a => true
case _ => false
} // returns true
Run Code Online (Sandbox Code Playgroud)
因为case a绑定了一个名为的新变量a.
一个非常常见的情况是
val opt: Option[Int] = ...
opt match {
case None => ... // you really don't want None to be a new variable here
case Some(a) => ...
}
Run Code Online (Sandbox Code Playgroud)