Ale*_*x R 2 language-features scala scala-2.8
这按预期工作
scala> 3 match { case x:Int => 2*x }
res1: Int = 6
为什么这会失败?
scala> 3 match { case $x:Int => 2*$x }
:1: error: '=>' expected but ':' found.
3 match { case $x:Int => 2*$x }
^
scala> 3 match { case `$x`:Int => 2*$x }
:1: error: '=>' expected but ':' found.
3 match { case `$x`:Int => 2*$x }
^
scala> 3 match { case `$x` : Int => 2*$x }
:1: error: '=>' expected but ':' found.
3 match { case `$x` : Int => 2*$x }
'$'应该是一个有效的标识符字符,如下所示:
scala> var y = 1 y: Int = 1 scala> var $y = 2 $y: Int = 2
谢谢
Ran*_*ulz 15
来自"Scala语言规范",第1章("词法语法"):
"'$'字符是为编译器合成的标识符保留的.用户程序不应该定义包含'$'字符的标识符."
所以这个非 bb 是语言规范的正式部分.
即使它不鼓励,也可以用标识符写出$.但是以$开头的标识符不算作变量标识符 - 只有以小写字母开头的标识符.另一方面,类型化模式id:Type需要在:前面的变量标识符.这就是比赛被拒绝的原因.