コマンドプロンプトで試した結果です。
Scalaのmatch=swichですね。
breakが要らない。次のcaseまでが処理される。
caseで判定ができる。
caseで関数を呼び出しても良い。自身を再帰的に呼び出せる。
caseで「|」で複数の条件をまとめれる。
「_」がワイルドカードになる。
◆まずはMatchの関数を作成
scala> def match_int(porute: Int) = porute match {
| case 0 => 100
| case n if n < 0 => 0
| case 1 | 2 | 3 => 200
| case _ => 300
| }
match_int: (porute: Int)Int
引数の値を変えて、作成した関数を呼び出してみましょう
scala> var acha = -1
acha: Int = -1
scala> match_int(acha)
res__: Int = 0
scala> acha = 0
acha: Int = 0
scala> match_int(acha)
res__: Int = 100
scala> acha = 2
acha: Int = 2
scala> match_int(acha)
res__: Int = 200
scala> acha = 5
acha: Int = 5
scala> match_int(acha)
res__: Int = 300
◆型のマッチング
scala> def match_any(piipo: Any) = piipo match {
| case s:String => "length="+s.length
| case i:Int => match_int(i)
| case a:AnyRef => a.getClass.getName
| case _ => "null"
| }
match_any: (piipo: Any)Any
引数の値を変えて、作成した関数を呼び出してみます。
(…Stringで演算するような不具合は減るかなー)
scala> var acha = "boo"
acha: String = boo
scala> match_any(acha)
res__: Any = length=3
scala> var acha = -1
acha: Int = -1
scala> match_any(acha)
res__: Any = 0
scala> acha = 5
acha: Int = 5
scala> match_any(acha)
res__: Any = 300
scala> match_any(null)
res__: Any = null