home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

Scala/色々な実行方法

Scala/色々な実行方法

Scala / 色々な実行方法
id: 1080 所有者: msakamoto-sf    作成日: 2012-05-06 21:57:17
カテゴリ: Scala 

Scalaを実行する色々な(といっても2種類だけど)方法。

対話型インタプリタから実行

  1. 基本なので省略。
  2. 但し対話型インタプリタ上(正確にはREPL:Read Eval Print Loop)からの場合、中でpackage宣言は出来ません。"illegal start of definition" が発生します。な、なんだってー!!

スクリプトとして実行

シェバン行指定については調べてません。

(適当なディレクトリ1)/run_by_script.scala:

args.foreach(println)

実行:(適当なディレクトリ2)に移動してscalaコマンドでファイル名指定。

> scala (適当なディレクトリ1)/run_by_script.scala abc def
abc
def

ポイント:

  1. スクリプトファイル名と、中で宣言するクラスは無関係。いくらでもクラス宣言可能。
  2. 但しスクリプトファイルの場合、中でpackage宣言は出来ません。"illegal start of definition" が発生します。な、なんだってー!!

コンパイルして実行

(適当なディレクトリ1)/hello.scala:

class c1
class c2
object main {
  def main(args:Array[String]) {
    for (i <- 0 to args.length - 1) println("args(" + i + ") = " + args(i))
  }
}

"適当なディレクトリ2"に移動してコンパイル

> scalac (適当なディレクトリ1)/hello.scala

→ "適当なディレクトリ2" の下にクラスファイル(.class)が生成される。("-d" で出力先ディレクトリを指定できます。)

"適当なディレクトリ2"に移動してコンパイルしたクラスファイルを実行

> scala main abc def
args(0) = abc
args(1) = def

ポイント:

  1. ソースファイル名と中のクラス名を一致させる必要はありません。
  2. ちなみに、あくまでもscalaはコンパイルして実行するタイプの言語ですので、Perl/Python/Ruby/PHPみたいにソースファイルを実行時に取り込んで実行する機能は多分ありません。importはありますがあくまでもコンパイル済みの.classファイルを参照するのみ。

こういう機能はない・・・多分。

foo.scala:
...
import "abc/sub1.scala"
...

コンパイルして実行(package宣言有り)

(適当なディレクトリ1)/package1.scala:

package foo {
  class c1
}

package foo.bar {
  class c2
}

package foo.bar.baz {
  object main {
    def main(args:Array[String]) {
      args.foreach(println)
    }
  }
}

"適当なディレクトリ2"に移動してコンパイル

> scalac (適当なディレクトリ1)/package1.scala

→ "適当なディレクトリ2"の下に以下の構成でclassファイルが生成される。

foo/c1.class
foo/bar/c2.class
foo/bar/baz/main.class, main$.class, ...

"適当なディレクトリ2"の外からコンパイルしたクラスファイルを実行

> scala -cp 適当なディレクトリ2 foo.bar.baz.main abc def
abc
def

ポイント:

  1. ソースファイル・ソースのディレクトリ構成と、パッケージ名・クラス名は別々に付けられます。
  2. 但し生成されるクラスファイルの構成は、パッケージ名とクラス名に従います。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2012-05-06 22:32:01
md5:4c76df2739cb37fdf2ef4d5da41cb63e
sha1:828f12fba473b4d3a99a97235599d42c6257c51d
コメント
コメントを投稿するにはログインして下さい。