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

継続的に増加する整数が必要な場合は、ストリームを使用できます。

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 に答える