Erlang错误:没有匹配io:request的函数子句

时间:2016-10-06 01:46:17

标签: erlang

我是Erlang的新手程序员,我坚持以下几点:

myread() ->
    {_, MyData } = file:read_file( "hands.txt" ),
    io:format( "hands-out.txt", "~w", MyData ).

从shell调用myread()时产生:

** exception error: no function clause matching io:request("hands-out.txt",
          {format,"~w", <<"3h 5h 7h 8h 3h 5h 7h 8h q"...>>}) 
      (io.erl, line 556)  in function  io:o_request/3 (io.erl, line 63)

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:4)

两件事:

"hands-out.txt", "~w"必须是一个字符串:"hands-out.txt: ~w"

并且替换~w的数据需要是一个列表。所以:

io:format( "hands-out.txt: ~w", [MyData] ).

请参阅http://erlang.org/doc/man/io.html#format-2

此外,您应该在file:read_file/1的回复中对状态值进行模式匹配。在您的版本中,由于您使用的是{error, Reason},因此您将使用_错误,该错误将在{ok, MyData } = file:read_file( "hands.txt" )处返回,并且您将打印错误原因而不是文件,这可能会造成混淆。

因此,如果您想要在读取错误时崩溃,请将其设为myread() -> case file:read_file( "hands.txt" ) of {ok, MyData } -> io:format( "hands-out.txt: ~w", [MyData] ); {error, Error} -> io:format("Error: ~w~n", [Error]) end. ,如果您想要处理该情况,请执行以下操作:

{{1}}