2015年7月20日月曜日

Scalaで学ぶ関数脳入門 抽出子

P183 パターンマッチングと抽出子
class FruitShop {
 def niceSale(day:Day){
  day match {
    case Mysale(salePrice) => printf("Price: %s\n",salePrice)
  }
 }
}

......
object SaleValidator {
  def unapply(day:Day):Boolean~={
    day match {
     case friday:Friday => true
     case monday:Monday => true
     case _ => false
   }
  }
}

object Mysale {
  def unapply(day:Day):Option[(Double)]={
   day match {
    case SaleValidator() => Some(day.salePrice)
   case _ => Some(day.price)
   }
  }
}

抽出子について...apply(ファクトリメソッド)の逆のことを行う。unapplyにより、インスタンスのdayの中の値を取り出すはたらきをする。
 val Day(price)=dayで dayからpriceが抽出できる。
 SaleValidatorのほうのunapplyはBooleanを返しています。applyが不要な抽出子オブジェクトということで、コップ本の26章の抽出子についての説明にあるようです。
 パターンマッチで使うときには、戻り値はOptionかBooleanということらしい。こちらも参照させていただいた。この知識がないと、ここは理解しずらいところかも。。。


0 件のコメント:

コメントを投稿