Вы можете изменять var
s только на уровне класса.Это сделано преднамеренно, потому что актерам не нравятся обновления на месте - это не очень хорошо сочетается с параллельным доступом без блокировки.
Функции по умолчанию имеют возможность box
, что означает, что данныеуправляется этой функцией только для чтения.Чтобы функция могла изменять данные, необходимо объявить метод fun ref
.
actor Main
var i: U32 = 0
fun ref foo() =>
i = i + 1
new create(env: Env) =>
env.out.print(i.string())
foo()
env.out.print(i.string())
Playground