Я обнаружил эту проблему в 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
, и только можетбыть вызванным внутри этого объекта.
И решение этой проблемы: Не удастся исправить
Я хочу знать, есть ли какая-либо причина, чтобы число былоназвание метода?Есть ли случаи, когда нам нужно использовать «числовой» метод?