for(counter <- 1 to 10) println(counter)
どのようなタイプの可変カウンタですか? varまたはval。浮動小数点型のFOR式でのスカラー
答えはValです。今明らかな問題は、それがvalならば、出力は0、...、9となります。つまり、「カウンタ」変数の値は各反復にわたって変更されます。つまり、毎回カウンタが別の値に再割り当てされます。
カウンタ「の値 『』変数は、各繰り返し切り換えられる」 -
おっと間違っ - 正しい 「カウンタが異なる値にするたびに再割り当てされています」。どのように可能ですか?
のx =新しいフルーツ(「アップル」)(フルーツの名前と呼ばれる性質を持つ、クラスである)
が今どのように私はのための新しい値を取得することができます(スカラ座とJavaの両方のために)のは、JVMが働いていた方法を見てみましょうx、2つの方法があります。オブジェクトを作成しながらメモリについて少し話すことを理解する。 この場合、オブジェクトは値 "Apple"のヒープメモリ内に作成され、アドレスは "xxxx"となります。 xは値 "xxx"を持つスタックに入ります。今、y = xのように、同じオブジェクトが他のオブジェクトによって参照されるようになりました。どちらも値 "Apple"を持つ同じオブジェクトを指しています。 新しいオブジェクトz = new String( "Banana")を作成します。
は、xの新しい値を取得するには- y.name = "オレンジ" - >オブジェクト値
- のx = zの変更 - > Zに再割り当てを
場合xはval(finalはJava)で、way 2は可能ではありませんがway 1はokです。結論は、あなたがvalまたはfinalを宣言すると(javaで)、そのrefを新しいrefに再割り当てすることはできませんが、pointedオブジェクトは変更できます。 ref( "xxx")の値はvalの場合は変更できません。 for(counter <- 1 to 10) println(counter)
ここでは、「カウンタ」はvalであるため、カウンタは新しい値に再割り当てされませんが、カウンタによって指されるオブジェクトは毎回変更されます。
また、スカラの「FOR」は式ではなく、式です。違いは.expressionは常にいくつかのことを返されますが、文はいずれかを返すことはありません。
は、誰もが
http://stackoverflow.com/questions/40860218/undesired-behavior-of-val-in-for -loop-in-scala/40860578#40860578。私の答えは投稿で見つけてください。 – BDR