7

我在函数外部声明了一个变量,如下所示:

var s: Int = 0

像这样通过它:

def function(s: Int): Boolean={

   s += 1

   return true

}

但在我的一生中,错误行不会在“s + =”下消失。我什么都试过了。顺便说一句,我是 Scala 的新手。

4

5 回答 5

4

首先,我要重复我的警告:下面的解决方案既晦涩又低效,如果可能的话,尽量坚持使用values。

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
于 2013-03-29T15:04:15.917 回答
3

如果您只想不断增加整数,则可以使用 Stream。

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

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

val number: Int = numberStream.next
于 2014-03-12T19:11:39.887 回答
1

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

var s: Int = 0

def function(s: Int): Boolean={

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

}

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

于 2013-10-05T16:44:05.200 回答
0

你没有。

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

因此,要更改名称指向的引用,您需要对包含该名称的任何内容的引用。如果它是一个对象,那就很容易了。如果它是一个局部变量,那么它是不可能的。

另请参阅通过引用调用,尽管我认为这个问题不是真正的重复。

于 2013-03-29T15:00:43.300 回答
-1

如果你只想增加一个从 3 开始的变量

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

然后调用它:

下一个 ID()

于 2017-11-22T16:21:14.217 回答