木曜日, 12月 31, 2015

Scala - Sequenceマッチ

Scalaのmatch文は極めて強力で,そのうちの一つのリスト要素へのパターンマッチも便利なものの一つだろう.以下の例はMyCatへのコンストラクタマッチとリスト要素へのシーケンスパターンマッチの組み合わせの例.もしパターンマッチ内でジェネリック型も含めた型パターンマッチ等をしていて,かつJavaからそのscalaコードから作られたクラスを利用する場合は,Javaの型消去の特性に気を付けるように.


object Matcher {

  def main(args:Array[String]):Unit = {
    val nekoz = genCats()
    nekoz.foreach{ x =>
      x match {
        case MyCat(a,b) if a > 5 => println("Adult neko.")
        case _ => println("..")
      }
    }
    nekoz match {
      case l @ List(MyCat(8, _), _*) => println(s"okay, starting with 8 year old cat - $l")
      case _ => println("..")
   }

  }


  def genCats() = {
    MyCat(8, "Tora") :: MyCat(4, "Mikeyo") :: List()
  }

}

case class MyCat(age:Int, name:String)


0 件のコメント: