社員ブログ
HOME  社員ブログ
ホーム > 社員:ピーター, 雑記 > Scalaファイルにパッケージ宣言が含まれているとScalaインタープリタでエラー

Scalaファイルにパッケージ宣言が含まれているとScalaインタープリタでエラー

2015年10月14日 18時02分27秒

こんにちは、ピーターです。

突然ですが、パッケージ宣言が含まれている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コマンドを使った方法をご紹介します。

  1. scalaコマンドでREPLを起動します。
  2. REPLで:pasteコマンドを実行して貼り付けモードにします。
  3. パッケージ宣言を除いたコードを貼り付けます。
        コードの最後に空行がない場合は貼り付け後に空行を追加してください。
        でないと貼り付けモードを終了できないようです。
  4. ctrl + Dで貼り付けモードを終了します。

これでコードが読み込まれました。
読み込まれただけではmainメソッドは呼ばれませんので、mainメソッドは自分で呼びます。

scala> Mine.main(null)
55

正常に実行できました。


社員:ピーター, 雑記

  1. コメントはまだありません