增加和获得价值

时间:2013-02-10 12:07:39

标签: scala

简单的scala问题。请考虑以下内容。

scala> var mycounter: Int = 0;
mycounter: Int = 0

scala> mycounter += 1

scala> mycounter
res1: Int = 1

在第二个声明中,我增加了我的计数器。但没有任何回报。如何在一个语句中递增和返回某些内容。

3 个答案:

答案 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
}