小编Éva*_*ult的帖子

在Erlang中计数(如何增加变量?)

我已经找到了Erlang风格的循环:带有函数的尾递归,这些函数可以获取所有"不变的变量":

%% does something, 80 bytes at a time
loop(Line, File) -> loop(Line, File, 0).
loop(Line, File, Count) -> 
    do_something(Line, Count),
    case file:read(File, 80) of
        {ok, Line2} -> loop(Line2, File, Count + 1);
        eof -> file:close(File);
        {error, Reason} -> {error, Reason}
    end.
Run Code Online (Sandbox Code Playgroud)

但是,在Erlang中增加计数器的最佳方法是什么?在大多数编程语言中,计算事物的方式是通过递增变量(即.count += 1;).Erlang的变量没有变化,因此我们必须具有创造性.幸运的是,我们有选择......

我们可以使用函数传递Counter变量,并在每次函数调用时递增它.我们可以使用进程字典来存储计数,get并将put其递增.我们可以使用ETS,即进程的本地数据存储.我们可以使用柜台流程(!!!):

loop(Count) ->                            
    receive                                   
        { incr } -> 
            loop(Count + 1);              
        { report, To } ->                     
            To ! { count, Count },            
            loop(Count)                           
    end.                                      

incr(Counter) ->
    Counter ! { …
Run Code Online (Sandbox Code Playgroud)

erlang

7
推荐指数
2
解决办法
1万
查看次数

标签 统计

erlang ×1