#erlang
#erlang
Вопрос:
Я опытный программист, новичок в Erlang, и я застрял на следующем:
myread() ->
{_, MyData } = file:read_file( "hands.txt" ),
io:format( "hands-out.txt", "~w", MyData ).
выдает, когда 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:
Две вещи:
"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
Кроме того, вы должны сопоставить шаблон со значением статуса в возврате from file:read_file/1
. В вашей версии ошибка, которая будет возвращена как {error, Reason}
будет соответствовать here, поскольку вы используете _
, и вы бы напечатали причину ошибки, а не файл, что может сбить с толку.
Так что либо сделайте это {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.