2017-06-25 9 views
0

私はその後、ScalaのリストとvalのユーティリティとVAR

val a = 1 

を書いていた場合には、再び私に

a : Int = 1 

を与えます私はスカラのval宣言された変数に値を代入することはできません。

変数としてvalを宣言して長さ3のScala Listを割り当てた場合、長さを変更することはできませんが、そのScala配列内の個々の要素の値を変更することができます。この場合でも変数はまだ不変ですが、配列は内部的に変更可能であるため、意味があります。

私は

val OneTwo = List(1,2) 

のようなScalaのリストは、彼が出力を続くINTなります宣言した場合、今の質問はScalaのリストに記載されている:

oneTwo: List[Int] = List(1,2) 

[OK]を、今、このしよう:

val OneTwo = List("One","Two") 

は、次の出力結果を出力します。

oneTwo: List[String] = List("One","Two") 

リスト変数、つまりoneTwoが変更可能で、新しい種類のオブジェクトにそれを再割り当てできる理由はわかりません。なぜオブジェクトが不変になるJava Stringのように振る舞いますが、それが割り当てられている変数を新しいStringオブジェクトに割り当てることができます。それがそうならば、ここでそれをvalと宣言する効用は何ですか?

+0

のために働くだろう?? – prayagupd

+0

oneTwo = List( "One"、 "Two")をvalの前に付けずに試してみてください。あなたはvalエラーに同じ再割り当てを取得します。 –

+0

2番目のステートメントで新しいvalを作成するだけです。既存のvalに新しい値を代入するのではなく、oneTwoという名前の新しいvalを作成しています。 – ramzavil

答えて

0

私はあなたがスカラREPLでこれを試していると思います。 valを再割当てすることはできませんが、REPLで再宣言できます。

再宣言はまた、あなたがこのテストにREPLを使用している変数

val a = 1 
val a = 2 
+0

私たちがあなたと同じことをやっているとき、それは私たちが再割り当てできなくて、私はそれで問題ないと言います。問題の配列の場合、なぜそれを新しいオブジェクトに再割り当てすることができるのですか? – Mayank

関連する問題