case even =>
на самом деле является шаблоном переменной и не ссылается на even.unapply
, как намекает предупреждение компилятора
Warning:(19, 9) patterns after a variable pattern cannot match (SLS 8.1.1)
If you intended to match against object even in class A$A3, you must use backticks, like: case `even` =>
case even => println("Is even")
^
Вы только что случайно дали ему то же имя, но вы могли бы написать
n match {
case foo => println("Is even")
...
}
, и он все равно вывел бы Is even
, потому что переменная шаблона находится в первой позиции.