如何增加传递给Scala函数的整数变量?

时间:2013-03-29 14:45:44

标签: scala parameter-passing immutability

我在函数之外声明了一个变量:

var s: Int = 0

传递了如下:

def function(s: Int): Boolean={

   s += 1

   return true

}

但是错误线在我的生命中不会在“s + =”之下消失。我尝试了一切。我是Scala btw的新手。

5 个答案:

答案 0 :(得分:3)

首先,我将重复我的提醒:如果有可能尝试坚持使用val,那么下面的解决方案既模糊又效率低

implicit class MutableInt(var value: Int) {
  def inc() = { value+=1 } 
}

def function(s: MutableInt): Boolean={
   s.inc() // parentheses here to denote that method has side effects
   return true
}

以下是行动中的代码:

scala> val x: MutableInt = 0 
x: MutableInt = MutableInt@44e70ff

scala> function(x)
res0: Boolean = true

scala> x.value
res1: Int = 1

答案 1 :(得分:2)

如果您只想连续增加整数,可以使用Stream。

val numberStream = Stream.iterate(0)(_ + 1).iterator

从零开始,在永无止境的数字流上创建一个迭代器。然后,要获得下一个号码,请致电

val number: Int = numberStream.next

答案 2 :(得分:1)

我刚开始使用Scala这是我的工作。

var s: Int = 0

def function(s: Int): Boolean={

   var newS = s
   newS = newS + 1 
   s = newS
   return true

}

从我读到的内容中,您没有像在其余代码中那样将“s”传递给您的函数。我相信有更好的方法,但这对我有用。

答案 3 :(得分:0)

你没有。

var是一个引用可能被更改的引用的名称。当你调用一个函数时,你传递了引用本身,并且一个新的名字被绑定到它。

因此,要更改名称所指的引用,您需要引用包含名称的内容。如果它是一个对象,这很容易。如果它是局部变量,则不可能。

另见参考电话,但我不认为这个问题是真正的重复。

答案 4 :(得分:-1)

如果您只想增加一个以3开头的变量

val nextId = {var i = 3; ()=> {i + = 1;我}

然后调用它:

nextId()