Я понимаю, что Scala полностью поддерживает неизменность.
Теперь я думаю о сценарии, в котором мне нужно удерживать некоторое состояние (через переменные) в классе или что-то в этом роде. Мне нужно будет обновить эти переменные позже; затем я могу вернуться к классу позже, чтобы получить доступ к обновленным переменным.
Я попытаюсь упростить это на одном очень простом примере:
class A {
var x: Int
def compute: Int = {calling some other processes or such using x as input}
}
......
def invoker() {
val a: A = new A
a.x = 1
......
val res1 = a.compute
a.x = 5
......
val res2 = a.compute
......
}
Итак, вы видите, мне нужно продолжать изменять x и получать результаты. Если вы утверждаете, что я могу просто оставить x в качестве аргумента для вычислений, таких как
def compute(x: Int)
......
Это хорошая идея, но я не могу сделать это в моем случае, так как мне нужно разделить значение параметра x и полностью вычислить результат. Другими словами, установка значения x не должна запускать «вычисление», скорее, мне нужно иметь возможность установить значение x в любое время в программе и иметь возможность повторно использовать значение для вычисления в любое другое время в программе, когда мне это нужно. .
В этом случае я использую переменную (var x: Int). Является ли это законным или есть еще какой-то неизменный способ справиться с этим?
x
? Не могли бы вы сделать так, чтобы кусок кода, вызывающийcompute
, считывал значениеx
с того места, где оно обычно устанавливается? Обратите внимание, что есть некоторые случаи, когда вы не можете написать полностью неизменяемую программу, особенно когда задействован ввод-вывод. - person gzm0   schedule 31.05.2013