Erlang的透析仪警告

时间:2018-07-02 14:01:24

标签: erlang dialyzer

我正在使用透析器来修复erlang代码中的警告,

  

io:format(IoDevice,“ []”);

此行产生以下错误

调用io:format(IoDevice :: pid(),[91 | 93,...])将永远不会返回,因为成功键入是(atom()| binary()| string (),[any()])->'ok',并且当Format :: format(),Data :: [term()] 时,合同为(Format,Data)->'ok' strong>

我无法理解问题是什么,任何人都可以解决吗?

谢谢

1 个答案:

答案 0 :(得分:4)

我建议阅读io manual page。它的用法很简单:

1> io:format("hello ~p~n", [world]). % ~n means newline
hello world
ok
2> io:format("hello ~p~n", [<<"world">>]).             
hello <<"world">>
ok
3> io:format("hello ~s~n", [<<"world">>]).
hello world
ok

在上面的透析器中,您告诉我们io:format/2format/2意味着函数format接受2个参数)接受atom()string()或{{1} }作为第一个参数,并将具有零个或多个元素的列表作为第二个参数。根据您的代码,透析器检测到binary()是Erlang IoDevice而不是pid()string()