Я играю с отражением в Scala 2.10.0-M7 и наткнулся на метод ClassSymbol.isCaseClass
, который ведет себя так, как ожидалось, в консоли scala, но не при выполнении как java-приложение или как scala-скрипт.
Я определил TestScript.scala
следующим образом:
import reflect.runtime.currentMirror
case class TestCase(foo: String)
object Test {
def main(args: Array[String]) {
val classSymbol = currentMirror.reflect(new TestCase("foo")).symbol
val isCaseClass = classSymbol.isCaseClass
println(s"isCaseClass: $isCaseClass")
}
}
Test.main(Array())
Если я выполню его в командной строке, вызвав
$ scala TestScript.scala
Я получаю этот вывод:
isCaseClass: false
Если вместо этого я введу код в интерактивную оболочку scala или загружу его следующим образом:
scala> :load TestScript.scala
Я получаю следующий правильный вывод:
Loading TestScript.scala...
import reflect.runtime.currentMirror
defined class TestCase
defined module Test
isCaseClass: true
Если я скомпилирую его и выполню как стандартное приложение Java, я снова получу false
в качестве результата для ClassSymbol.isCase
.
Что мне не хватает? Каковы различия между средой консоли scala и средой выполнения Java? Как я могу получить правильный результат в реальном приложении?