参考にしたサイト
アクターで楽々並行プログラミング
Scalaの平行性を掘り下げる
復習も兼ねて、例にあった簡単なコードをコピーしてみる。
このプログラムでは、文字列を5回しゃべるアクターが2つ立ち上がり、お互いに関係なくしゃべったら終了します。
- import scala.actors.Actor // Actorトレイトをインポート
- class Printer(val msg : String) extends Actor { // Actorを継承したPrinterクラス
- def act () { // Actorクラスの場合、act()メソッド必須。これを実行する。
- for(i <- 1 to 5) { // scalaのfor構文
- println(msg)
- Thread.sleep(3)
- }
- }
- }
- object App { // 実行の主体
- def main (args : Array[String]) {
- (new Printer("abcdefg")).start // Printerクラスをインスタンスにして実行させる
- (new Printer("hijklmn")).start // Actorではstartメソッドが実行されるとact()が実施される
- }
- }
- トレイトは、rubyのモジュールみたいなもの
- objectはScalaではシングルトンパターンの実装。クラスのインスタンスであり定数ではない。
scala-example$ vim actor_test1.scala # ソースを作成 scala-example$ scalac actor_test1.scala # コンパイル scala-example$ ls -altr # クラスファイルが2つ出来ている。 -rw-r--r-- 1 baker staff 276 5 4 15:36 actor_test1.scala -rw-r--r-- 1 baker staff 14692 5 4 15:38 Printer.class -rw-r--r-- 1 baker staff 1327 5 4 15:38 Printer$$anonfun$act$1.class -rw-r--r-- 1 baker staff 604 5 4 15:38 App.class -rw-r--r-- 1 baker staff 649 5 4 15:38 App$.class drwxr-xr-x 14 baker staff 476 5 4 15:56 . scala-example$ scala -cp . App # クラスを指定して実行。クラスパスはカレント。 abcdefg hijklmn abcdefg hijklmn abcdefg hijklmn abcdefg hijklmn hijklmn abcdefgclassファイルが複数出来るのは知らなかった。また、この中間ファイルみたいな$$がついたファイルはなんだろう。これを削除すると実行がうまくいかないので、コンパイルされた実態(中間コード)なのかな?
0 件のコメント:
コメントを投稿