2013年9月5日木曜日

IntelliJでScalaの継続プラグインを設定

以下のScala実践プログラミングの限定継続のサンプルをIntelliJで動かす時にハマったのでメモ。

import scala.util.continuations._

object Main extends App {
  val answer = reset {
    val x = shift {k: (Int => Int) =>
      println("A")
      println("k(10) = " + k(10))
      println("B")
      8
    }
    println("x = " + x)
    x * 2
  }
  println("answer = " + answer)
}

普通にコンパイルすると以下のエラーとなる。

java.lang.NoSuchMethodError: scala.util.continuations.package$.shift(Lscala/Function1;)Ljava/lang/Object;

コンパイルするためには継続プラグイン(continuations.jar)の置き場所をIntelliJで指定しないといけない。

continuations.jarはbrewやsbt(ivy)で取ってきたディレクトリを探すと見つかると思います。

Project Structure > Modulesで対象モジュールのScalaオプションを選択すると以下の画面が表示されます。
Compiler Pluginsでcontinuations.jarを追加し、”Enable continuations”にチェックを入れるとScalaの限定継続のコードがコンパイルできるようになります。

0 件のコメント:

コメントを投稿