2012年3月17日土曜日

Scala 2.9.1.finalのインタプリターIMainでバグ

Scala 2.9.1.finalでインタプリタのIMainをいじっていたら、
インタプリタ内で定義した値を取得するメソッド であるvalueOfTermが常にNoneを返すので、
調べてみたら、このページに行き着いた。

https://issues.scala-lang.org/browse/SI-4899

どうやら、2.9.1のバグらしく2.9.0-1では、ちゃんと動くらしい。

2.9.1でインタプリタ内で定義した値を取得するには、valueOfTerm使わずに取得しなければならない。

IMainにprevRequestListというprotectedのメソッドがあり、

これは、List[Request]を返すが、このRequestを使って値を取得できるようだ。

たとえば、以下のようにすれば、取得できる。

 class MyIMain( s:Settings ) extends IMain( s ) {
 def lastRequest = prevRequestList.last
 }

 val settings = new Settings
 settings.usejavacp.value = true
 val main = new MyIMain(settings)
 main.quietImport("java.util.Date")
 main.interpret("val d = new Date")
 println(main.lastRequest.lineRep.call("$result"))
 main.close()