【发布时间】:2012-09-11 20:02:06
【问题描述】:
我在 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 shell 中或像这样加载它:
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运行时环境有什么区别?如何在实际应用中得到正确的结果?
【问题讨论】:
标签: scala reflection scala-2.10