Scala 2.10反射:ClassSymbol.isCaseClass在Scala控制台中工作,但在脚本/应用程序中不工作

Scala 2.10反射:ClassSymbol.isCaseClass在Scala控制台中工作,但在脚本/应用程序中不工作,scala,reflection,scala-2.10,Scala,Reflection,Scala 2.10,我在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

我在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> :load TestScript.scala
如果我在命令行调用

$ scala TestScript.scala
我得到这个输出:

isCaseClass: false
如果我改为将代码输入交互式scala shell或按如下方式加载它:

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> :load TestScript.scala
我得到以下正确的输出:

Loading TestScript.scala...
import reflect.runtime.currentMirror
defined class TestCase
defined module Test
isCaseClass: true
如果我编译它并将其作为标准Java应用程序执行,我会再次得到
ClassSymbol.isCase
false

我错过了什么?scala控制台环境和java运行时环境之间有什么区别?如何在实际应用程序中获得正确的结果?

编辑:要回答您的最后一个问题,您不会在实际应用程序中使用里程碑


Upd。自Scala 2.10.0-RC1以来已修复。

如果作为java应用程序执行,它就可以工作,但如果作为Scala脚本执行,它就不能工作。但由于剧本只是为了尝试一下,这对我来说并不是一个障碍。关于您的编辑:当然,我不会为一个高效的应用程序使用里程碑;-)对于“real”,我只是指在JVM上运行的编译工件(例如jar)。