简单的scala问题。请考虑以下内容。
scala> var mycounter: Int = 0;
mycounter: Int = 0
scala> mycounter += 1
scala> mycounter
res1: Int = 1
在第二个声明中,我增加了我的计数器。但没有任何回报。如何在一个语句中递增和返回某些内容。
答案 0 :(得分:8)
使用'+ ='return Unit,您应该这样做:
{ mycounter += 1; mycounter }
你也可以使用闭包(因为函数参数是val):
scala> var x = 1
x: Int = 1
scala> def f(y: Int) = { x += y; x}
f: (y: Int)Int
scala> f(1)
res5: Int = 2
scala> f(5)
res6: Int = 7
scala> x
res7: Int = 7
顺便说一句,您可能会考虑使用不可变值,并采用这种编程风格,然后所有语句都会返回一些内容;)
答案 1 :(得分:7)
有时我会这样做:
val nextId = { var i = 0; () => { i += 1; i} }
println(nextId()) //> 1
println(nextId()) //> 2
如果您需要在某段时间内访问值而不递增,则可能无法为您效劳。
答案 2 :(得分:1)
赋值是一个被评估为Unit的表达式。背后的推理可以在这里找到:What is the motivation for Scala assignment evaluating to Unit rather than the value assigned?
在Scala中,这通常不是问题,因为您正在解决的问题可能有不同的构造。
我不知道您的确切用例,但如果您想使用增量,则可能采用以下形式:
(1 to 10).foreach { i =>
// do something with i
}