Соответствие шаблону без ключевого слова соответствия - PullRequest
0 голосов
/ 07 мая 2018

В своей статье Когда 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 Ответ

0 голосов
/ 07 мая 2018

Код не будет компилироваться без ключевого слова 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
  // ...
}
...