我发现了
scala这个问题:
https://issues.scala-lang.org/browse/SI-4939
scala> object Foo { val 1 = 2 } defined module Foo
但我们无法援引它:
scala> Foo.1 <console>:1: error: ';' expected but double literal found. Foo.1
我们可以在对象中调用它:
scala> object O { val 1 = 1; def x = 1 } defined module O scala> O.x res1: Int = 1
以下将抛出错误:
scala> object O { val 1 = 2; def x = 1 } defined module O scala> O.x scala.MatchError: 2 at O$.<init>(<console>:5) at O$.<clinit>(<console>) at .<init>(<console>:7) at .<clinit>(<console>) at RequestResult$.<init>(<console>:9)
我使用scalac -Xprint:typer来查看代码,val 1 = 2部分是:
<synthetic> private[this] val x$1: Unit = (2: Int(2) @unchecked) match { case 1 => () }
从中,我们可以看到方法名称已更改为x $1,并且只能在该对象内调用.
该问题的解决方案是:不会修复