[erlang-questions] leading underscores on variables versus _

Ulf Wiger (TN/EAB) <>
Fri Feb 2 15:55:39 CET 2007


I have on occasion used underscored variables
in the following way

foo([{x, _, _, Thingy, _} = _Obj| T]) ->
   ?dbg("_Obj = ~p~n", [_Obj]),
   ...

The great and marvellous advantage is of course 
that if I redefine dbg to expand to a constant,
the linter doesn't start warning about unused 
variables.

(So bizarre code like yours is not the only code
that would break, but also bizarre code like mine.) 

BR,
Ulf W

> -----Original Message-----
> From:  
> [mailto:] On Behalf Of 
> Matthias Lang
> Sent: den 2 februari 2007 15:14
> To: 
> Subject: Re: [erlang-questions] leading underscores on 
> variables versus _
> 
> Ulf Wiger writes:
> 
>  > Underscores are always ignored. The variables that begin  
> > with an underscore are actually real variables. The  > 
> linter interprets them as "don't care" patterns, but the  > 
> compiler does not.
> 
> This seems to catch many or even most beginners. It seems 
> natural (?) to expect _name to be a longer way of writing _, 
> i.e. that any variable starting with _ means exactly the same 
> thing as if you'd just written _.
> 
> An example where that doesn't hold:
> 
>   f(_x, _x) -> same;
>   f(_,_) -> different.
> 
> Changing _x to behave as many (most?) initially expect would 
> break backwards compatibility, but only for misleading code 
> such as the above...
> 
> Matthias
> _______________________________________________
> erlang-questions mailing list
> 
> http://www.erlang.org/mailman/listinfo/erlang-questions
> 




More information about the erlang-questions mailing list