簡単なscalaの質問。以下を考慮してください。
scala> var mycounter: Int = 0;
mycounter: Int = 0
scala> mycounter += 1
scala> mycounter
res1: Int = 1
2番目のステートメントでは、カウンターをインクリメントします。しかし、何も返されません。1つのステートメントで何かをインクリメントして返すにはどうすればよいですか。
簡単なscalaの質問。以下を考慮してください。
scala> var mycounter: Int = 0;
mycounter: Int = 0
scala> mycounter += 1
scala> mycounter
res1: Int = 1
2番目のステートメントでは、カウンターをインクリメントします。しかし、何も返されません。1つのステートメントで何かをインクリメントして返すにはどうすればよいですか。
'+ ='を使用すると、 Unitが返されるため、次のようにする必要があります。
{ mycounter += 1; mycounter }
クロージャを使用してトリックを実行することもできます(関数パラメーターはvalであるため)。
scala> var x = 1
x: Int = 1
scala> def f(y: Int) = { x += y; x}
f: (y: Int)Int
scala> f(1)
res5: Int = 2
scala> f(5)
res6: Int = 7
scala> x
res7: Int = 7
ところで、代わりに不変の値を使用することを検討し、このプログラミングスタイルを採用すると、すべてのステートメントが何かを返します;)
時々私はこれをします:
val nextId = { var i = 0; () => { i += 1; i} }
println(nextId()) //> 1
println(nextId()) //> 2
インクリメントせずに値にアクセスする必要がある場合は、機能しない可能性があります。
割り当ては、ユニットに評価される式です。その背後にある理由はここにあります:割り当てられた値ではなく、ユニットに評価されるScala割り当ての動機は何ですか?
Scalaでは、これは通常問題ではありません。これは、解決しようとしている問題に対して別の構成が存在する可能性があるためです。
正確な使用例はわかりませんが、インクリメントを使用する場合は、次の形式になる可能性があります。
(1 to 10).foreach { i =>
// do something with i
}