Обратите внимание, что типы возвращаемых значений для unapply
отличаются.
Normal.unapply
возвращает Option
. Когда вы делаете case Normal(foo)
, вызывается unapply
, и, если он возвращает Some(number)
, сопоставление успешно, и number
присваивается локальной переменной foo
, а если возвращается None
, сопоставляется выходит из строя.
Emergency.unapply
возвращает Boolean
, поэтому case Emergency()
завершается успешно, если возвращается true
, в противном случае происходит сбой, но в случае успеха результат не присваивается, поэтому «параметр» отсутствует.