定义scala变量范围

时间:2017-04-26 05:15:33

标签: scala hadoop scala-collections

我是这个领域的新手,正在尝试基本的东西,但却陷入了一个简单的变量范围问题。

在下面的代码中,我想在整个程序中使用“item”,并希望打印它的值。但是当我在foreach循环中使用“item”时,它将它视为局部变量,并且它的值在循环旁边不可用。

你能告诉我我错在哪里吗?

import scala.collection.immutable._

val set1=Set()
val set2=Set("A","B","C")
var item:String=null

println(set1.isEmpty)
println(set2.head)
println(set2.tail)

set2.foreach{item => if (item != "A") println(item)}

println(item)

结果:

真 res0:单位=() 一个 res1:单位=() 设(B,C) res2:单位=()

乙 C res3:单位=()

null //预计会占用foreach循环的最后结果

1 个答案:

答案 0 :(得分:1)

foreach内,您正在创建一个具有相同名称的新变量,因此它会影响"阴影"存在第一个item

x =>是命名传递给后面的匿名函数的参数的语法。

听起来你想要类似的东西......

set2.foreach{x => item = x; if (item != "A") println(item)}