参考にしたサイト
アクターで楽々並行プログラミング
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()が実施される } }Scalaの"思い出し”をメモ。
- トレイトは、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 件のコメント:
コメントを投稿