次のように、関数の外で変数を宣言しました。
var s: Int = 0
次のように渡します。
def function(s: Int): Boolean={
s += 1
return true
}
しかし、私の人生では、エラー行は「s + =」の下に消えません。私はすべてを試しました。私はScalaが初めてです。
次のように、関数の外で変数を宣言しました。
var s: Int = 0
次のように渡します。
def function(s: Int): Boolean={
s += 1
return true
}
しかし、私の人生では、エラー行は「s + =」の下に消えません。私はすべてを試しました。私はScalaが初めてです。
まず第一に、注意事項を繰り返します。以下の解決策はあいまいで非効率的です。可能であれば、val
ues に固執するようにしてください。
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
継続的に増加する整数が必要な場合は、ストリームを使用できます。
val numberStream = Stream.iterate(0)(_ + 1).iterator
これにより、ゼロから始まる終わりのない数のストリームに対してイテレータが作成されます。次に、次の番号を取得するには、電話します
val number: Int = numberStream.next
私もScalaを使い始めたばかりで、これが私の回避策でした。
var s: Int = 0
def function(s: Int): Boolean={
var newS = s
newS = newS + 1
s = newS
return true
}
私が読んだことから、残りのコードと同じ「s」を関数に渡していません。もっと良い方法があると確信していますが、これは私にとってはうまくいっています。
あなたはそうしない。
Avar
は、変更される可能性のある参照を参照する名前です。関数を呼び出すときに参照自体を渡すと、新しい名前がそれにバインドされます。
そのため、名前が指す参照を変更するには、名前を含むものへの参照が必要です。それがオブジェクトであれば、それは簡単です。それがローカル変数である場合、それは不可能です。
参照による呼び出しも参照してください。ただし、この質問は真の重複ではないと思います。