[erlang-questions] case expression scope

Thomas Lindgren <>
Mon Mar 3 19:46:03 CET 2014


You could hide the bindings inside a fun.

   A = (fun() -> case ... end end)( ),
   B = (fun() -> case ... end end)( ),
   {A, B}.

Though I agree with Ivan that refactoring might be a better idea in this case. 

A related issue: I'd like to get warnings when variables are matched (not bound) in patterns. I've seldom found repeated variables very useful in practice, they can easily be rewritten to use explicit compares, and sometimes they have hidden groan-inducing bugs. 

(Binary patterns are a special case; _some_ repeated variables are be benign there.)

Best,
Thomas



On Monday, March 3, 2014 5:59 PM, Daniel Goertzen <> wrote:
 
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/362b8976/attachment.html>


More information about the erlang-questions mailing list