修改Erlang记录

时间:2015-05-20 21:55:35

标签: erlang record erl

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

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

有多种方法可以做到这一点。想想你想要存储值的位置:Erlang没有像C这样的“静态变量”,所以函数本身不记得该值。

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