0

私はscalaで遊んでいて、いくつかの非常に基本的なVal割り当てを行いました。以下を参照してください。valを再割り当てすると、varであるかのように動作しているようです。

scala> val number = 17
number: Int = 17

scala> println(number)
17

scala> val number = 20
number: Int = 20

scala> number
res1: Int = 20

scala> val string = "ABC1234"
string: String = ABC1234

scala> println(string)
ABC1234

scala> val string = "DEF123"
string: String = DEF123

scala> println(string)
DEF123

自分が何をしたのかよくわかりません。エラーが発生するはずだと思いますか?

ありがとう

4

1 に答える 1

3

valこれは REPL でのみ発生し、キーワードを再度入力した場合にのみ発生します。これは便利な機能なので、REPL で遊んで同じ名前を再利用し続けることができます。そうしないと、再起動する必要があり、面倒です。

scala> val foo = "abc"
foo: String = abc

scala> foo = "def"
<console>:8: error: reassignment to val
       foo = "def"
       ^

でも、

scala> val bar = 123
bar: Int = 123

scala> val bar = 456
bar: Int = 456

これらはどちらもコンパイラによって許可されていません。

また、不変性は s のプロパティではないことに注意してくださいvalvalJavaとよく似た scala 関数ではfinal、値を 1 回しか割り当てることができません。ただし、オブジェクトは変更可能である可能性があります。例えば:

scala> val foo = new Foo("abc", "def")
foo: Foo = Foo@6e905272

scala> foo.foo = "ghi"
foo.foo: String = ghi

不変性はクラスのプロパティです。不変オブジェクトへの「変更」は、現在のインスタンスを変更せず、変更が加えられた新しいインスタンスを作成します。 StringそしてList[T]、このプロパティを持っています。上記のFooクラスはそうではありません。

于 2013-09-09T13:05:36.427 に答える