[erlang-questions] Newbie question about Erlang style

Håkan Stenholm <>
Wed Feb 27 22:57:53 CET 2008


Kevin Scaldeferri wrote:
> On Feb 27, 2008, at 12:04 PM, Convey Christian J NPRI wrote:
>
>   
>> Is there any non-aesthetic reason prefer one of the following  
>> approaches over the other?
>>
>>
>> if Foo  -> X = 1;
>>   true -> X = 2
>> end
>>
>> vs.
>>
>> X = if
>>   Foo  -> 1;
>>   true -> 2
>>   end
>>     
>
>
>
> A related question: are all variables function scoped in Erlang?   
> Obviously, the first example wouldn't work at all if the branches of  
> an if or case created a new scope.  Is there any way to explicitly  
> create a new scope?
>   

Variables are usually defined from the point where they are introduced 
until the end of the function - so they are essentially defined in the 
entire function as one can't declare a variable without binding a value 
to it.

One exception is list comprehensions where one can shadow previously 
defined variables.

It is also possible to introduce the same variable in different branches 
of a if/case which works as expected, but may raise compiler complaints 
if one tries to use them in code outside, following the if/case - which 
requires the variable/s to be defined in all branches (even ones that 
always call exit/throw/error ...), to ensure that there is always a 
value bound to the variable.

I think it's possible to declare funs that have input variables, with 
the same names as existing ones, which shadow the previous variablenames 
- this is probably a bad idea because one might want to use those 
variables inside the fun and because the complier will (probably) create 
warnings about it.

>
> -kevin
> _______________________________________________
> erlang-questions mailing list
> 
> http://www.erlang.org/mailman/listinfo/erlang-questions
>
>   



More information about the erlang-questions mailing list