Может ли цикл Scala for изменять переменные вне своей области видимости? - PullRequest
4 голосов
/ 17 августа 2011

Например, предположим, у меня есть следующее

  var lastSecurity = ""

  def allSecurities = for {
    security <- lastTrade.keySet.toList
    lastSecurity = security
  } yield security

На данный момент

lastSecurity = security

Создается впечатление, что создается новая переменная в области видимости, а не изменяется переменная, объявленная в первой строке кода.

Ответы [ 2 ]

10 голосов
/ 17 августа 2011

Попробуйте это:

var lastSecurity = ""

def allSecurities = for {
  security <- lastTrade.keySet.toList
} yield {
  lastSecurity = security
  security
}
1 голос
/ 17 августа 2011

Это похоже на

var a = 1
{
  var a = 2
  println(a)
}
println(a)

, который печатает

2
1

Не имеет значения, являются ли они var с или val с.В Scala вам разрешено скрывать переменные из внешней области видимости, но это может привести к некоторой путанице, когда вы извиняетесь за необходимость использовать ключевое слово val, то есть для-понимания, анонимных функций и сопоставления с образцом.

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