переменная, не распознанная вне инструкции case

#scala #apache-spark #functional-programming #switch-statement #pattern-matching

#scala #apache-spark #функциональное программирование #switch-инструкция #сопоставление с шаблоном

Вопрос:

Пожалуйста, помогите мне понять, почему переменная ‘afd’ не распознается вне инструкции case. Я запускаю приведенный ниже код и получаю сообщение об ошибке ниже: Спасибо!

 1 match {
  case 0 => "zero"
  case 1 => val afd = "one"
}

afd.show()

res1784: Any = ()
<console>:492: error: not found: value afd
       afd.show()
       ^
  

Ответ №1:

Есть пара проблем. Во-первых, вы пытаетесь получить afd значение за пределами области видимости. Она определена внутри match инструкции и доступна только там (в этом конкретном case случае). match возвращает значение, поэтому вы можете использовать что-то вроде:

 val afd = 1 match {
  case 0 => "zero"
  case 1 => "one"
}
  

Во-вторых, даже если она была доступна за пределами match , afd имеет тип String и String не имеет show метода. Вам пришлось бы распечатать ее, используя, например print(afd) .

Комментарии:

1. Спасибо! Теперь я понимаю, что вы имеете в виду. Фактическая проблема использует фрейм данных, я просто упростил, чтобы упростить читателю, как бы вы обработали совпадение, если это фрейм данных? есть ли альтернатива, которая позволила бы мне получить доступ к переменной за пределами области соответствия?