Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang 如果值不是零,则打印该值_Erlang - Fatal编程技术网

Erlang 如果值不是零,则打印该值

Erlang 如果值不是零,则打印该值,erlang,Erlang,如果大于零,我需要打印一个值: info({mail, BoxPid, Messages, MessageCount, MessageDropCount}, Req, S) -> if MessageDropCount > 0 -> io:format("dropped=~p~n", [MessageDropCount]); true -> true end, ..., {loop, Req, S};

如果大于零,我需要打印一个值:

info({mail, BoxPid, Messages, MessageCount, MessageDropCount}, Req, S) ->
    if MessageDropCount > 0 ->
            io:format("dropped=~p~n", [MessageDropCount]);
       true -> true
    end,
    ...,
    {loop, Req, S};

我不喜欢if表达式的
true->true
部分。有办法避免吗?有这样的习惯用法吗?

您可以使用具有模式匹配的函数:

info({mail, BoxPid, Messages, MessageCount, MessageDropCount}, Req, S) ->
    printIfNotZero(MessageDropCount,"dropped=~p~n"),
    ...,
    {loop, Req, S};

...
printIfNotZero(0,_) -> ok;
printIfNotZero(C,M) -> io:format(M, [C]).
编辑:一个更通用的功能可以是:

info({mail, BoxPid, Messages, MessageCount, MessageDropCount}, Req, S) ->
    printCond(MessageDropCount =/= 0,"dropped=~p~n",[MessageDropCount]),
    ...,
    {loop, Req, S};

...
printCond(false,_,_) -> ok;
printCond(true,Format,Arglist) -> io:format(Format,Arglist).
报告提出了以下模式:

  • [io:format(“drop=~p~n”,[MessageDropCount])| | MessageDropCount>0]
  • MessageDropCount>0和其他io:format(“droped=~p~n,[MessageDropCount])
  • MessageDropCount=<0或lse io:format(“droped=~p~n,[MessageDropCount])

我甚至想说一个更通用的变体是:
if(false),ok;if(true,Action)->Action()。
的用法类似于:
if(MessageDropCount>0,fun()->io:format(“drop=~p~n”,“MessageDropCount])end)。
不过,事实上,我觉得你的和我的解决方案对于一般用法来说都过于冗长/繁琐,
MessageDropCount>0以及io:format(“drop=~p~n”,[MessageDropCount])
wins。是的,但我试图直接回答Akonsu的问题。我怀疑问题与应用程序中发生的某些事件的日志有关;我使用了多种解决方案,从无条件控制台打印到使用gen_事件以及一系列事件处理程序登录控制台、文件甚至图形I面对面。提供比要求更多的信息总是一种诱惑,但是……简短是美丽的