underscore prefixed variables (was: Re: Noob - Getting Started Infinte Loop?)

Bjorn Gustavsson <>
Thu Aug 31 11:19:17 CEST 2006


It is sometimes useful to refer to variables with underscores
in debug code. In the example below, the io:format/2 call can
be simply uncommented when needed:

foo(V) ->
        ....
foo(_V) ->
   %% io:format("~p\n", [_V]),
   error.

/Bjorn

Fredrik Thulin <> writes:

> On Thursday 31 August 2006 03:03, Håkan Stenholm wrote:
> ...
> > Note that _V is still a valid variablename, so the code below is
> > valid:
> >
> >     foo(_V) ->
> >         _V * 2.
> >
> >     a call to foo(42) would yield 84 in this case.
> 
> As Håkan points out, _V * 2 is valid. I think this is bad. In 
> combination with assign-once, it introduces bugs like in this example :
> 
>  case lists:keysearch(primary, 1, MyList) of
>     {value, {primary, _Socket}} ->
>         %% do something because our "primary" socket exists, although we 
>         %% don't really care about the socket iself
>         ...
>     false ->
>         case lists:keysearch(secondary, 1, MyList) of
> 	    {value, {secondary, _Socket}} ->
> 	         %% do something because our "secondary" socket exists,
> 	         %% although we don't really care about the socket itself
> 
> I think that
> 
>   a) variables prefixed with "_" should really not be variables that get 
>      set - like the special case _.
>   b) the compiler should issue a warning that you are actually using a
>      variable prefixed with "_".
> 
> Would others care to share their view on this?
> 
> /Fredrik
> 

-- 
Björn Gustavsson, Erlang/OTP, Ericsson AB



More information about the erlang-questions mailing list