Scala for循环可以修改其范围之外的变量吗?

时间:2011-08-17 02:30:04

标签: scala

例如假设我有以下

  var lastSecurity = ""

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

目前

lastSecurity = security

似乎是在范围内创建一个新变量,而不是修改第一行代码中声明的变量。

2 个答案:

答案 0 :(得分:10)

试试这个:

var lastSecurity = ""

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

答案 1 :(得分:1)

就像

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

打印

2
1

这些是var还是val并不重要。在Scala中,您可以隐藏外部作用域中的变量,但是当您不得不使用val关键字时,这可能会导致一些混淆,即for-comprehensions,匿名函数和模式匹配。