[erlang-questions] Unexpected try/catch behaviour

Richard O'Keefe ok@REDACTED
Thu Feb 25 02:57:18 CET 2010


On Feb 24, 2010, at 9:56 PM, Raimo Niskanen wrote:
> I think this kind of construct is harder to do without the of..catch  
> part:
>
> Handle = resource:open("foo.txt"),
> try resource:read(Handle) of
>    {ok, Data} ->
> 	foo(Data);
>    Error ->
> 	Error
> catch
>    error:Reason ->
> 	{error,Reason}
> after
>    resource:close(Handle)
> end

The tricky thing here is that foo(Data) is
*outside* the scope of the "catch"
*inside* the scsope of the "after"
if I haven't blown all my fuses entirely.

Useful, this is.  Easy to take into acount when reading, it isn't.
I think I'd want some comments, being a Bear of very little Brain.

     Handle = resource:open("foo.txt"),
     try                              	% catch? after?
         resource:read(Handle)		% yes    yes
      of {ok, Data} -> foo(Data)         % no     yes
       ; Error      -> Error
     catch
         error:Reason -> {error,Reason}
     after
         resource:close(Handle)          % no     no
     end

Perhaps nested tries and cases might actually be easier to read.



More information about the erlang-questions mailing list