定义一个 Scala 变量范围
define a scala variable scope
我是这个领域的新手,正在尝试基本的东西,但陷入了一个简单的变量范围问题。
在下面的代码中,我想在整个程序中使用 "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 循环的最后结果
在 foreach
中,您正在创建一个同名的新变量,因此 "shadows" 第一个 item
.
的存在
x =>
是命名传递给后面的匿名函数的参数的语法。
听起来你想要类似的东西...
set2.foreach{x => item = x; if (item != "A") println(item)}
我是这个领域的新手,正在尝试基本的东西,但陷入了一个简单的变量范围问题。
在下面的代码中,我想在整个程序中使用 "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 循环的最后结果
在 foreach
中,您正在创建一个同名的新变量,因此 "shadows" 第一个 item
.
x =>
是命名传递给后面的匿名函数的参数的语法。
听起来你想要类似的东西...
set2.foreach{x => item = x; if (item != "A") println(item)}