В следующем фрагменте кода, в котором внешние совпадения vars (x, y) соответствуют случаю (xx, yy):Анализатор кода Scala задает имена переменных переменных, которые идентичны внешним сопоставленным переменным - «подозрительное затенение»
scala> val (x,y) = (1,2)
x: Int = 1
y: Int = 2
scala> (x,y) match {
| case (xx:Int, yy:Int) => println(s"x=$x xx=$xx")
| }
x=1 xx=1
Мы могли бы также написано, что код следующим образом:
scala> (x,y) match {
| case (x:Int, y:Int) => println(s"x=$x y=$y")
| }
x=1 y=2
В этом последнем случае Scala анализаторы кода сообщит нам:
Подозрительное затенение переменным рисунком
ОК. Но есть ли ситуация, когда мы могли бы на самом деле неправильно использовать внутреннюю переменную (x или y) вместо исходных внешних переменных соответствия?
Кажется, это чисто стилистическое? Нет реальной возможности для ошибок? Если так, мне было бы интересно узнать, что может быть ошибкой.
Переменная затенение - скрытая ошибка. Lurker - это то, что возникает и укусывает вас, когда вы забыли свой код, когда вернетесь к нему, или b) попросите кого-то нового в этом районе войти и попытайтесь его изучить/сохранить. Как правило, не стоит беспокоиться о том, чтобы оставить затенение на месте. –
@BobDalgleish Я просил явных демонстраций того, как эта «скрывающая ошибка» может проявиться, а не теоретическая. – javadba
Это не наименее теоретически. Я был немного доволен, но в несколько большей функции. Я не мог понять, почему переменная, которую я использовал, не показывала ожидаемое значение. Провел почти час, ударяя головой в отладчик, пока не заметил тень. Сделайте все одолжение и напишите чистый код, пожалуйста! –