Соответствие шаблону без ключевого слова соответствия

В своей статье Когда 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
  // ...
}
Другие вопросы по тегам