You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Erlang中实现actor调用次数计数递增的问题

Erlang中实现Actor维护调用次数的方案

由于Erlang变量具有不可变性,无法直接修改变量值来维护计数,我们可以通过进程递归循环+状态参数传递的方式实现Actor的状态维护,核心思路是让进程在每次处理请求后,携带更新后的状态进入下一次循环。

完整实现代码

-module(actor).
-export([start/0, call/1]).

% 启动Actor进程,初始化计数为0
start() ->
    spawn(fun() -> loop(0) end).

% 向指定Actor发送调用请求,获取当前计数
call(Pid) ->
    Pid ! {call, self()},
    receive
        {count, Count} -> Count
    end.

% 内部循环函数,维护计数状态
loop(Count) ->
    receive
        {call, From} ->
            NewCount = Count + 1,
            From ! {count, NewCount},
            loop(NewCount); % 携带更新后的状态进入下一次循环
        stop ->
            ok % 可选:处理停止消息,结束进程循环
    end.

工作流程说明

  • start/0:创建新进程并进入初始状态为0的循环,返回进程ID(Pid)。
  • call/1:向目标Actor进程发送调用消息,等待Actor返回更新后的计数。
  • loop/1:进程的核心逻辑,接收消息后更新计数,回复调用者,再带着新计数递归进入循环,实现状态的持续维护。

测试示例

在Erlang Shell中执行以下命令:

1> Pid = actor:start().
<0.100.0>
2> actor:call(Pid).
1
3> actor:call(Pid).
2
4> actor:call(Pid).
3
5> actor:call(Pid).
4
6> actor:call(Pid).
5

调用5次后,Actor返回的计数为5,符合预期需求。

这种模式是Erlang中维护进程状态的标准实践,完全契合Erlang不可变变量的设计哲学,通过消息传递和递归循环实现安全的状态管理。

内容的提问来源于stack exchange,提问作者Rishab Parmar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 22:30:53