Можно ли изменить аргумент функции?(как и в C ++) - PullRequest
0 голосов
/ 24 декабря 2018
 actor Test
     fun foo(a: U32) =>
        a = a + 1

Я хочу test.foo(a) изменить a.Это возможно?Спасибо

1 Ответ

0 голосов
/ 31 декабря 2018

Вы можете изменять 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

...