Structs

Mikael Karlsson <>
Thu Jan 16 13:55:05 CET 2003


Hi Luke,
Whats wrong with:

connect(Host, User, Password) ->
    case catch connect1(Host, User, Password) of
	{ok,Result} ->
	    {ok,Result};
	{badmatch,{{error, Rsn}} ->
	    {error, otp_ftp:formaterror(Rsn)}
    end.

connect1(Host, User, Password) ->
    {ok, Pid} = otp_ftp:open(Host),
    link(Pid),
    ok = otp_ftp:user(Pid, User, Password),
    {ok, Home} = otp_ftp:pwd(Pid),
    ?event(ftp, "~p: Home is ~p", [self(), Home]),
    ok = otp_ftp:type(Pid, binary),
    {ok, {Pid, Home}}.

?/Mikael

torsdag 16 januari 2003 13:04 skrev Luke Gorrie:
>
> I still have problems in Erlang in the cases where I don't want to
> crash, i.e. the non-assertion type of error detection. Here's a
> function I wrote recently:
>
>   connect(Host, User, Password) ->
>       case otp_ftp:open(Host) of
>           {ok, Pid} ->
>               link(Pid),
>               case otp_ftp:user(Pid, User, Password) of
>                   ok ->
>                       case otp_ftp:pwd(Pid) of
>                           {ok, Home} ->
>                               ?event(ftp, "~p: Home is ~p", [self(),
> Home]), case otp_ftp:type(Pid, binary) of
>                                   ok ->
>                                       %% It is at about this level of
> nesting %% that better exception handling in %% erlang becomes appetizing..
> {ok, Pid, Home};
>                                   {error, Rsn} ->
>                                       {error, otp_ftp:formaterror(Rsn)}
>                               end;
>                           {error, Rsn} ->
>                               {error, otp_ftp:formaterror(Rsn)}
>                       end;
>                   {error, Rsn} ->
>                       {error, otp_ftp:formaterror(Rsn)}
>               end;
>           {error, Rsn} ->
>               {error, otp_ftp:formaterror(Rsn)}
>       end.
>
> Cheers,
> Luke




More information about the erlang-questions mailing list