Good practice

Vladimir Sekissov <>
Sun Jun 8 22:35:55 CEST 2003


Good day,

Some ways are:

1. Single value return:

Response =
 case checkvalid(Funcref, Correctlist) of
   false ->
     false;
   Other ->
     invoker(Other, Otherargs)
 end,
 Requester ! Response,  

2. Multiple values with pattern-matching and tuples/lists/records:

{R1, R2} =
 case checkvalid(Funcref, Correctlist) of
   false ->
     {false, true};
   Other ->
     invoker(Other, Otherargs)
 end,
 Requester1 ! R1,  
 Requester2 ! R2,

3. Simplified non-local return with catch/throw to avoid many nested clauses:

Response =
  case catch
    begin
     ...
     case checkvalid(Funcref, Correctlist) of
       false ->
        throw({ok, false});
       _ ->
        ok
     end,
     ...
     case invoker(Other, Otherargs) of
        true ->
          throw({ok, true});
         _ ->
           ok
     end,
     ...
    end of
     {ok, V} ->
       V;
     Error ->
       exit(Error)
  end,
 Requester ! Response,  

Best Regards,
Vladimir Sekissov

erlang> >From the file in question:
erlang> 
erlang>       case checkvalid(Funcref, Correctlist) of
erlang>         false ->
erlang>           Response = false;
erlang>         Other ->
erlang>           Response = invoker(Other, Otherargs)
erlang>       end,
erlang>       Requester ! Response,  
erlang> 
erlang> Obviously the warning warns me of a problem.  This I expect, and welcome.
erlang> However, that doesn't mean I want to see warnings; I want to do things
erlang> right.  I could just put the message in the case statement, I suppose, but
erlang> is there really a canonical way of doing the above without getting the
erlang> complaint?



More information about the erlang-questions mailing list