抽出子
= Extractor
Scalaのmatch式で使うオブジェクト。値を分解して取り出す仕組みを提供する。
実態は unapply:Option[T] メソッドを持つオブジェクト
これがSomeを返せばマッチ成功・変数束縛、Noneなら次へ、という感じの動きになる
object に手動で unapply を書くと、Case Classなしで任意の判定ロジックをパターンマッチに持ち込める
具体例:NonFatal
Q. なんでunapply?
コンパニオンオブジェクトのapplyメソッドは、値からオブジェクトを作るコンストラクタのようなもの。
つまり 値 → オブジェクト
Scalaのmatch式の値比較では、オブジェクトから中身の値を取り出して判定する
つまり オブジェクト → 値。逆だよね。applyの逆だからunapply。