我玩弄反射在斯卡拉2.10.0-M7和偶然发现了ClassSymbol.isCaseClass
其如期望的那样在斯卡拉控制台,但不是在一个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> :load TestScript.scala
我得到以下正确的输出:
Loading TestScript.scala...
import reflect.runtime.currentMirror
defined class TestCase
defined module Test
isCaseClass: true
如果我编译它,执行它作为一个标准的Java应用程序,我得到false
的结果为ClassSymbol.isCase
一次。
我在想什么? 什么是Scala的控制台环境和Java运行时环境之间的差异? 我怎样才能得到正确的结果在实际的应用?