[erlang-questions] Inconsistent shadowing of variables in a fun

José Valim <>
Sun Jan 29 23:42:37 CET 2017


>From my understanding, the N in this case can never be an unbound variable.
If you rename N to M, then it won't compile, so it would not be possible
for it to shadow anything.

It is similar to map keys. They are always treated as values, even when
inside patterns.


On Sun, Jan 29, 2017 at 23:07 Robert Virding <> wrote:

> When defining a fun the shadowing of variables occurring in arguments is
> inconsistent. So with
>
> a(X, N) ->
>     fun (<<X,Y:N,_/binary>>) -> {X,Y} end.
>
> the X in the fun arguments shadows the X from before it while the N is
> imported and used. An example:
>
> 1> c(bt).
> bt.erl:8: Warning: variable 'X' is unused
> bt.erl:9: Warning: variable 'X' shadowed in 'fun'
> {ok,bt}
> 2> f(G),G=bt:a(34,8).
> #Fun<bt.1.1070726>
> 3> G(<<1,2,3,4,5>>).
> {1,2}
> 4> f(G),G=bt:a(34,16).
> #Fun<bt.1.1070726>
> 5> G(<<1,2,3,4,5>>).
> {1,515}
>
> Why the difference? Shouldn't we be consistent in shadowing all variables?
>
> Robert
>
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions
>
-- 


*José Valim*
www.plataformatec.com.br
Skype: jv.ptec
Founder and Director of R&D
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20170129/4d9e9098/attachment-0001.html>


More information about the erlang-questions mailing list