Erlang,如何在控制台中打印每个值?

Posted

技术标签:

【中文标题】Erlang,如何在控制台中打印每个值?【英文标题】:Erlang, how to print every value in console? 【发布时间】:2021-08-04 20:14:10 【问题描述】:

我有一个 start() 函数,它生成一个进程并在该进程中多次运行一个方法,它是一个简单的计算器,所以每一行都说: calculadora:contador(suma,1,1,Server) 将结果打印到控制台(在本例中为 1)。

问题是当 start 被调用时,它只打印 start 的最后一行: calculadora:contador('exit',Server) 作为结果给出(好的,再见)。

所以我的问题是如何使用这个启动函数打印每一个结果?

-module(calculadora).

-export([contador/2, loop/0, start/0]).

loop() ->
    receive
        Pid, suma, N1, N2 ->
            Pid ! N1 + N2,
            loop();
        Pid, resta, N1, N2 ->
            Pid ! N1 - N2,
            loop();
        Pid, multiplicacion, N1, N2 ->
            Pid ! N1 * N2,
            loop();
        Pid, division, N1, N2 ->
            Pid ! N1 / N2,
            loop();
        Pid, exit ->
            Pid ! "Bye";
        Pid, _ ->
            Pid ! error, "wtf",
            loop()
    end.

contador(X, Pid) ->
    Pid ! self(), X,
    receive
        error, E ->
            bad, E;
        Cont ->
            ok, Cont;
        R ->
            ok, R
    after 10 ->
        error, timeout
    end.

start() ->
    Server = spawn(?MODULE, loop, []),
    calculadora:contador(suma, 1, 1, Server),
    calculadora:contador(multiplicacion, 1, 1, Server),
    calculadora:contador(division, 1, 1, Server),
    calculadora:contador(resta, 1, 1, Server),
    calculadora:contador(exit, Server).

【问题讨论】:

【参考方案1】:

使用io:format,像这样:

io:format("Result: ~p~n", [calculadora:contador(suma,1,1,Server)]),

【讨论】:

以上是关于Erlang,如何在控制台中打印每个值?的主要内容,如果未能解决你的问题,请参考以下文章

Erlang:控制Erlang进程崩溃时如何使连接的外部OS进程自动死亡?

如何获取vfor中的key值并打印到控制台?

在控制台 VS 代码中显示所有输出

如何将打印在控制台上的值存储为矢量?

如何将 wchar_t 值打印到控制台?

在 Erlang 中使用 fread 从用户/控制台读取多个单词