Изменяемые поля неизменяемых значений в Scala - PullRequest
2 голосов
/ 01 апреля 2019

Рассмотрим простой класс и его (неизменяемый) экземпляр значения:

class MyClass (var m: Int) {}

val x : MyClass = new MyClass(3)

Поскольку m объявлена ​​как переменная (var), m изменчив .Однако, поскольку x объявлено как значение , оно является неизменным .Тогда x.m изменчив или неизменен?

1 Ответ

5 голосов
/ 01 апреля 2019

x.m является изменяемым.

Действителен следующий код:

class MyClass (var m: Int) {}

val x : MyClass = new MyClass(3)

println(x.m)

x.m = 7
println(x.m)

val содержит переменную, которая не может быть изменена, но в этом случае онане делает это постоянным.Действительно, он может иметь изменяемые внутренние поля (как в этом случае через var ).Концептуально, val ue x владеет неизменным указателем на переменную x.m (т.е. вы не можете изменить контейнер, на который ссылается x.m), но само целое число (т.е.содержимое контейнера) является изменчивым.

Похожие: В чем разница между определениями var и val в Scala?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...