0

我知道 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
...

我怎样才能做到这一点?

4

1 回答 1

1

有多种方法可以做到这一点。想想你想在哪里存储值:Erlang 没有像 C 那样的“静态变量”,所以函数本身无法记住值。

您可以将当前记录作为参数传递给add_new_num,并从其返回值中获取更新的记录。你可以保持一个进程运行,并发送消息来查询它的当前值并要求它增加值。或者,您可以将值存储在ETS 表中,甚至Mnesia中。

于 2015-05-20T22:21:30.117 回答