Почему эта ошибка возникает при компиляции с SBT? - PullRequest
0 голосов
/ 08 мая 2020

вот так:

unreachable code due to variable pattern

сообщение об ошибке

Я знаю, как решить эту проблему, но не знаю почему? Ошибка компилятора?

1 Ответ

2 голосов
/ 08 мая 2020

Ключ к пониманию - это последовательность шаблонов, затем первый шаблон, который соответствует победам, в то время как остальные игнорируются

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

Например, рассмотрим шаблон переменной pattern2 ниже, который соответствует любому значению

(42: Any) match {
  case pattern1: String => "first pattern1 was tried but did not match"
  case pattern2         => "then pattern2 was tried and it did indeed match"
  case pattern3: Int    => "so pattern3 was not tried because pattern2 already won"
}

тогда pattern3 никогда не будет выполняться, и все выражение сопоставления оценивается как

then pattern2 was tried and it did indeed match

, в то время как компилятор выдает предупреждение

Warning:(19, 28) unreachable code due to variable pattern 'pattern2' on line 22
  case pattern3: Int    => "so pattern3 was not tried because pattern2 already won"

Это не ошибка , но просто указан способ работы компилятора, чтобы избежать плохого или недоступного кода, который никогда не будет выполнен. Другой способ подумать об этом - представить сопоставление с образцом как цепочку if-else s

if (cond1) {
  "first cond1 was tried but did not match"
} else if (cond2) {
  "then cond2 was tried and it did indeed match"
} else if (cond3) {
  "so cond3 was not tried because cond2 already won"
} else {
  // crash
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...