#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. Спасибо! Теперь я понимаю, что вы имеете в виду. Фактическая проблема использует фрейм данных, я просто упростил, чтобы упростить читателю, как бы вы обработали совпадение, если это фрейм данных? есть ли альтернатива, которая позволила бы мне получить доступ к переменной за пределами области соответствия?