Соответствие шаблону без ключевого слова соответствия
В своей статье Когда OO и FP встречаются: возвращая один и тот же тип, @Jessitron дает следующий пример кода (с небольшими отличиями):
object Policy {
def adjust[P <: Policy](p: P, d: Discount): P = {
case ap: AutoPolicy => new AutoPolicy
case lp: LifePolicy => new LifePolicy
// ... etc
}
}
На каком значении применяется сопоставление с образцом? Я смущен отсутствием match
ключевое слово.
1 ответ
Решение
Код не будет компилироваться без match
ключевое слово как ниже:
def adjust[P <: Policy](p: P, d: Discount) = p match {
case ap: AutoPolicy => new AutoPolicy
case lp: LifePolicy => new LifePolicy
}
Если намерение было определить PartialFunction
(что маловероятно), у него была бы другая подпись:
def adjust[P <: Policy](p: P, d: Discount): PartialFunction[P, _] = {
case ap: AutoPolicy => new AutoPolicy
case lp: LifePolicy => new LifePolicy
// ...
}