私は 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 ランタイム環境の違いは何ですか? 実際のアプリケーションで正しい結果を得るにはどうすればよいですか?