例によってゆるよろさんのアレを、ちょっと改造する。
「unapplyって結局どういうことなの」感があったので、違う名前で同じ働きをするメソッドを用意して、動きの違いを見てみる。
import java.util.{Date,Calendar} object DateOf { // 抽出メソッド // java.util.Date型のオブジェクトの構造を年月日に分解する def unapply( d:Date ):Option[(Long,Long,Long)] = { val c = Calendar.getInstance c.setTime( d ) Some(( c.get( Calendar.YEAR ), c.get( Calendar.MONTH ) + 1, c.get( Calendar.DAY_OF_MONTH ) )) } } object FakeDateOf { // 似非抽出メソッド def myUnapply( d:Date ):Option[(Long,Long,Long)] = { val c = Calendar.getInstance c.setTime( d ) Some(( c.get( Calendar.YEAR ), c.get( Calendar.MONTH ) + 1, c.get( Calendar.DAY_OF_MONTH ) )) } } val DateOf( y,m,d ) = new Date // 抽出メソッドなので、後で使える println(y + m + d) // 似非抽出メソッドはとりあえず使える println(FakeDateOf.myUnapply(new Date)) // でもDateOfと同じようには使えない // error: object FakeDateOf is not a case class, nor does it have an unapply/unapplySeq member // val FakeDateOf( fy,fm,fd ) = new Date
はい。