[erlang-questions] [clarify] Variable binding in case clause and coding style

Jay Nelson jay@REDACTED
Mon Mar 10 16:42:30 CET 2008


Christian S wrote:

 > I rather rewrite it to this:
 >
 > case Endianness of
 >   big ->
 >     <<A:1/unit:32-big, Rest/binary>>,
 >     do_something(A,Rest);
 >   little ->
 >     <<A:1/unit:32-little, Rest/binary>>,
 >     do_something(A,Rest)
 > end.

It is simply easier to understand and not misinterpret.  Lexical
scoping for teh win.

If you don't like the repetition of function names, you can return a  
new structure which gives fresh variable references and avoid using  
the ones created in the case branches:

{Integer, More} = case Endianness of
                                             big ->
                                                 <<A:1/unit:32-big,  
Rest/binary>>,
                                                 {A, Rest};
                                             little ->
                                                 <<A:1/unit:32- 
little, Rest/binary>>,
                                                 {A, Rest}
                                           end,
do_something(Integer, More).


The main point is that it is error prone to rely on all branches of a  
case to set variables which are used later.  Better to make it  
explicit and let the compiler help you notice when one is missing.

jay




More information about the erlang-questions mailing list