Если вы хотите вернуть что-то с unapply
, верните это внутрь Some
. Возвращение Boolean
просто проверяет, может ли совпадение быть выполнено.
Вот как переводится соответствие шаблона:
str match {
case NumberMatcher(group) => println(group)
case _ => println("no")
}
Предполагая, NumberMatcher
возвращает Option[...]
, он будет делать:
val r1 = NumberMatcher.unapply(str)
if (r1 != None) {
val group = r1.get
println(group)
} else {
println("no")
}
Если NumberMatcher
возвращает логическое значение, вы можете получить его. В этом случае вот что происходит:
str match {
case NumberMatcher() => println("yes")
case _ => println("no")
}
становится
val r1 = NumberMatcher.unapply(str)
if (r1) {
println("yes")
} else {
println("no")
}
Обратите внимание, что это очень поверхностное объяснение. Совпадения с вариантами могут проверять константы, иметь дополнительные условия защиты, альтернативы, использовать unapply
рекурсивно, использовать unapplySeq
и т. Д. Здесь я только показываю очень простое использование для решения конкретного вопроса. Я настоятельно рекомендую поискать более полное объяснение сопоставления с образцом.