Scalaが面白いという話を聞いて遊び始める
基本はここからダウンロードしてインストールするだけ。IsPackインストーラあるから便利ね。
Java6最新update入ってりゃ基本問題ないはず。
IDE はこっちにあった。
そしてざくっとコード書く。
class Upper { def upper(strings:String*): Seq[String] = { strings.map((s:String) => s.toUpperCase()) } } var up = new Upper Console.println(up.upper("hello ","scala"))
とりあえずスクリプトモードで起動。
scala sample1.scala ArrayBuffer(HELLO , SCALA)
サンプルコードを動かして理解。
class Upper { def upper(strings:String*) = strings.map(_.toUpperCase()) } var up = new Upper Console.println(up.upper("hello ","scala"))
分かったこと。
Haskell,F# やってて良かった。まだ特になんの疑問もないよ。
エントリポイントなくてもスクリプトでなら動くのか、EclipseIDE上だとエラーになった。
ということで、エントリポイント。
object Upper { def main(args:Array[String]) = { args.map(_.toUpperCase()).foreach(printf("%s,", _)) println("") } }
エントリポイントを実行する方法は経験上幾つかあって、
- モジュールを読んだ際に、実行手続がある場合に暗黙実行(mainなしパターン)
- エントリポイントを識別するタグを作成する。(F#のEntryPoint属性とか)
- 特定の名前を予約し、それをエントリポイントとする。
パターン的には3つ目のようで、その場合複数の定義があると混乱とエラーを招く。Java の場合は、エントリ定義が複数ある場合は、実行時にクラスを指定してエントリを叩く。この時、注意が必要なのは、メソッドはstaticないしは、シングルトン定義である必要がある。
これは、new したときに、エントリポイントとなる関数が増えてしまう矛盾を避けるためだ。
上記のサンプルで static あるの?と一瞬思ったが、関数に static かそれに準じたものがないので、「object」がシングルトンの定義なんだと解釈。