[erlang-questions] case expression scope

Eric Pailleau <>
Mon Mar 3 23:54:47 CET 2014


f1(X,Y)->
    case {X,Y} of
           {0, Q} -> {Q, Q} ;
           {P, Q} -> {P*Q, P+Q}
    end.

regards.

« Envoyé depuis mon mobile » Eric

Daniel Goertzen <> a écrit :

>One thing that repeatedly bites me is the way variables bindings leak out
>of case expressions.  For example, the following code fails to even compile
>because the Ps and Qs smack into each other...
>
>f1(X, Y) ->
>    A = case {X,Y} of
>            {0, Q} -> Q;
>            {P, Q} -> P*Q
>        end,
>
>    B = case {X,Y} of
>            {0, Q} -> Q;
>            {P, Q} -> P+Q
>        end,
>    {A,B}.
>
>
>In situations like the above, I artificially change the variable names to
>avoid trouble and end up with something like this:
>
>f1(X, Y) ->
>    A = case {X,Y} of
>            {0, Q0} -> Q0;
>            {P0, Q0} -> P0*Q0
>        end,
>
>    B = case {X,Y} of
>            {0, Q1} -> Q1;
>            {P1, Q1} -> P1+Q1
>        end,
>    {A,B}.
>
>
>The binding leakages seems like nothing but hassles and headaches to me, so
>my questions is, is there actually a reason why bindings need leak out of
>case expressions?  Is there a programming style that leverages this
>feature?  Is there a limitation in the emulator that forces it to be this
>way?
>
>I'd love to have a 'hygienic' case expression.  Could it be faked with
>parse transforms?
>
>Dan.
>
>_______________________________________________
>erlang-questions mailing list
>
>http://erlang.org/mailman/listinfo/erlang-questions
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20140303/21819ff7/attachment.html>


More information about the erlang-questions mailing list