Эффективность PartialFunction orElse - PullRequest
6 голосов
/ 28 февраля 2012

Является ли использование PartialFunction orElse более или менее эффективным, чем использование большого блока match во время apply?

Чтобы проиллюстрировать вопрос, это:

val pf = { case "a" => "A"} orElse 
         { case "b" => "B" } orElse 
         { case "c" => "C" } ...

более или менее эффективно, чем:

val pf = { case "a" => "A"
  case "b" => "B"
  case "c" => "C"
  ...
}

во время применения значение pf:

pf(x)

Ответы [ 2 ]

5 голосов
/ 28 февраля 2012

См. подробный анализ от автора без фильтра . Это в основном менее эффективно. Я считаю, некоторая работа была проделана в транке для решения этой проблемы, вскоре после того, как было сделано сообщение в блоге.

1 голос
/ 28 февраля 2012

Второй случай не может быть менее эффективным, чем первый, потому что компилятор может просто преобразовать его в первый (и, фактически, это недалеко от того, что делает виртуальный сопоставитель шаблонов).

ИтакЕсли у вас есть выбор, второй случай всегда безопаснее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...