erlang 如何修复透析器中的“将永远不会返回,因为成功类型为[...],合同为...”?

9cbw7uwe  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(118)

我正在使用透析器修复Erlang代码中的错误。

io:format(IoDevice, "[]");

此行产生以下错误:

The call io:format(IoDevice::pid(),[91 | 93,...]) 
  will never return since the success typing is
  (atom() | binary() | string(),[any()]) -> 'ok' 
  and the contract is (Format,Data) -> 'ok' 
  when Format :: format(), Data :: [term()]

我不明白问题出在哪里有人能解释一下吗
谢谢你

tyky79it

tyky79it1#

我推荐阅读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表示接受2个参数的函数format)接受atom()string()binary()作为第一个参数,接受包含零个或多个元素的列表作为第二个参数。根据您的代码,透析器检测到IoDevice是Erlang pid(),而不是string()binary()

相关问题