ラベル match の投稿を表示しています。 すべての投稿を表示
ラベル match の投稿を表示しています。 すべての投稿を表示
このページの記事一覧
● 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 文 の仕組みが分かった気がするのでメモしておく。
List のマッチでは case List(x,y) みたいな形式だったので気が付かなかったのだが、 case 句には オブジェクトも書くことができる。

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 句の要素数の違いによるマッチもできる。

2012年9月7日金曜日

[Scala] match (Tuple編)

Tuple に対する match...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 文を見ていくことにする。

まずは基本形。

val a : Int = 2;
a match {
  case 1 => println("ONE");
  case 2 => println("TWO");
  case _ => println("OTHER: " + a);
}

いずれの条件にもマッチしなかった場合、Java でいうところの default は 「case _ 」で書く。