我在函数之外声明了一个变量:
var s: Int = 0
传递了如下:
def function(s: Int): Boolean={
s += 1
return true
}
但是错误线在我的生命中不会在“s + =”之下消失。我尝试了一切。我是Scala btw的新手。
答案 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()