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の限定継続のコードがコンパイルできるようになります。