-
パターンマッチをもっと便利に - extractor(抽出子)による拡張
- ゆるよろ日記 -
● 2012年9月23日日曜日 - | [Scala] match 文の仕組み |
● 2012年9月21日金曜日 - | [Scala] 正規表現によるマッチ |
● 2012年9月20日木曜日 - | [Scala] 一般クラスのマッチ |
● 2012年9月11日火曜日 - | [Scala] シーケンスのマッチ |
● 2012年9月7日金曜日 - | [Scala] match (Tuple編) |
● 2012年9月6日木曜日 - | [Scala] match (基本編) |
2012年9月23日日曜日
[Scala] match 文の仕組み
このブログを見て match 文 の仕組みが分かった気がするのでメモしておく。
2012年9月21日金曜日
[Scala] 正規表現によるマッチ
正規表現を使った match ... case 文を使ってみる。
val p : Regex = ".*no=([0-9]+),name=(.*)".r; val values = List( "no=10,name=ten", "no=11,name=eleven", "no=20,name=twelve" ); for (value <- values ) { value match { case p("10", v) => println("name for 10: " + v) case p("11", v) => println("name for 11: " + v) case p(n, v) => println("name, value= " + (n,v)) } }
name for 10: ten name for 11: eleven name, value= (20,twelve)
2012年9月20日木曜日
[Scala] 一般クラスのマッチ
List や Tuple ではない一般のクラスの場合、unapply、unapplySeq いわゆる抽出子(extractor)を定義しておくことで match ... case 文で使えるようになる。
... val a = new MatchSampleClass; a match { case MatchSampleClass(x, y) => println("x: " + x + " y: " + y); case _ => println("OTHER: " + a); } .... class MatchSampleClass object MatchSampleClass { def unapply(obj : MatchSampleClass) : Option[(String, String)] = { return Option(("ONE", "TWO")); } }
x: ONE y: TWO
2012年9月11日火曜日
[Scala] シーケンスのマッチ
List などシーケンス(Seq)のマッチを見てみよう。
Tuple と同様に型や出現位置によってマッチングを行い、変数への値の設定が行われる。
Tuple と違って List は可変長なので各 case 句の要素数の違いによるマッチもできる。
Tuple と同様に型や出現位置によってマッチングを行い、変数への値の設定が行われる。
Tuple と違って List は可変長なので各 case 句の要素数の違いによるマッチもできる。
2012年9月7日金曜日
[Scala] match (Tuple編)
Tuple に対する match...case のパターンマッチを見てみる。これがかなりに強力。
引数の型や数によってマッチする case 節を判定し、マッチした case 節の変数に値を割り当ててくれる。
引数の型や数によってマッチする case 節を判定し、マッチした case 節の変数に値を割り当ててくれる。
val list1 : List[Any] = List( ("one", 1), (2, 2), ("three", "tri", 3) ); for (elem <- list1) { elem match { case (v1: String, v2:Int) => println("[String, Int]: " + v1 + ", " + v2); case (v1: Int, v2:Int) => println("[Int, Int]: " + v1 + ", " + v2); case (v1, v2, v3) => println("[Triple]: " + v1 + ", " + v2 + ", " + v3); case _ => println("OTHER"); } }
[String, Int]: one, 1 [Int, Int]: 2, 2 [Triple]: three, tri, 3
2012年9月6日木曜日
[Scala] match (基本編)
多彩な機能を持つ Scala のMatch 文を見ていくことにする。
まずは基本形。
いずれの条件にもマッチしなかった場合、Java でいうところの default は 「case _ 」で書く。
まずは基本形。
val a : Int = 2; a match { case 1 => println("ONE"); case 2 => println("TWO"); case _ => println("OTHER: " + a); }
いずれの条件にもマッチしなかった場合、Java でいうところの default は 「case _ 」で書く。
登録:
投稿 (Atom)