Scalaファイルにパッケージ宣言が含まれているとScalaインタープリタでエラー
こんにちは、ピーターです。
突然ですが、パッケージ宣言が含まれているScalaファイルをScalaインタープリタで実行したいとします。
package chapter1 object Mine { def fib(n: Int): Int = { def loop(a: Int, b: Int, i:Int): Int = { if (n == 0) { 0 } else if (n == 1) { 1 } else if (i < n) { loop(b, a + b, i + 1) } else { a + b } } loop(0, 1, 2) } def main(args: Array[String]): Unit = { println(fib(10)) // 55 } }
scalaコマンドで実行した場合:
scala chapter1/Mine.scala
chapter1/Mine.scala:1: error: illegal start of definition
package chapter1
^
one error found
REPL(対話モード)の:loadコマンドで実行した場合:
scala> :load chapter1/Mine.scala
<console>:1: error: illegal start of definition
package chapter1
^
defined object Mine
どちらで実行してもパッケージ宣言があるためにエラーになってしまいます。
パッケージ宣言をコメントアウトすればエラーにならずに実行できますが、今回はREPL(対話モード)の:pasteコマンドを使った方法をご紹介します。
- scalaコマンドでREPLを起動します。
- REPLで:pasteコマンドを実行して貼り付けモードにします。
- パッケージ宣言を除いたコードを貼り付けます。
コードの最後に空行がない場合は貼り付け後に空行を追加してください。
でないと貼り付けモードを終了できないようです。 - ctrl + Dで貼り付けモードを終了します。
これでコードが読み込まれました。
読み込まれただけではmainメソッドは呼ばれませんので、mainメソッドは自分で呼びます。
scala> Mine.main(null)
55
正常に実行できました。
最近のコメント