首页 > 解决方案 > 是否可以修改函数参数?(如 C++ 中的 & )

问题描述

 actor Test
     fun foo(a: U32) =>
        a = a + 1

我想test.foo(a)修改a. 这可能吗?谢谢

标签: ponylang

解决方案


您只能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())

操场


推荐阅读