修改 Erlang 记录

Modifying an Erlang Record

我知道Erlang中的记录一旦设置就无法更改。我正在尝试使用记录来增加值。

add_new_num() ->
    Number = random:uniform(6),
    STR = #adder{value = 7},
    New = add(STR, Number).         

add(#adder{value =V} = Adder, Value) ->
    Adder#adder{value = V + Value}.

当运行add_new_num()我总会得到7 + Number。这不是我想要的。我想让它执行以下操作。

add_new_num() -> 7 + Number = Val
add_new_num() -> Val + Number = Val2
add_new_num() -> Val2 + Number = Val3
...

我怎样才能做到这一点?

有多种方法可以做到这一点。想想你想把值存储在哪里:Erlang 没有像 C 那样的 "static variables",所以函数本身不能记住这个值。

您可以将当前记录作为参数传递给 add_new_num,并从其 return 值中获取更新的记录。您可以保留一个进程 运行,并发送消息来查询它的当前值并要求它增加该值。或者您可以将值存储在 ETS table, or even Mnesia.