我发现了
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,并且只能在该对象内调用.
该问题的解决方案是:不会修复
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。