インタプリタ内で定義した値を取得するメソッド である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()
Scala 2.9.1.finalでインタプリタのIMainをいじっていたら、
Emacsにclojureの開発を整えた時のメモ。
Emacsのパッケージ管理システムであるMarmaladeをインストールしてみました。