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 件のコメント:
コメントを投稿