修改 Erlang 记录 [重复]

Posted

技术标签:

【中文标题】修改 Erlang 记录 [重复]【英文标题】:Modifying an Erlang Record [duplicate] 【发布时间】:2015-08-02 08:57:40 【问题描述】:

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

add_new_num() ->
    Number = random:uniform(6),
    STR = #addervalue = 7,
    New = add(STR, Number).         

add(#addervalue =V = Adder, Value) ->
    Adder#addervalue = 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】:

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

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

【讨论】:

我将如何从返回值@legoscia 更新记录

以上是关于修改 Erlang 记录 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Erlang 中的多个 erl 之间共享记录?

Erlang:检查重复的插入元素

为啥 Erlang 中的模式匹配记录会抛出错误

Erlang中的重复元素列表

如何在 Erlang 中正确运行一组 TWEANN 基准?

Erlang-如何在没有记录的情况下使用 Mnesia