Thread overview
Lambdas Scope
Apr 11, 2022
Salih Dincer
Apr 11, 2022
user1234
Apr 11, 2022
Timon Gehr
April 11, 2022

How is this possible? Why is it compiled? Don't the same names in the same scope conflict?

int function(int) square;
void main()
{
  square = (int a) => a * a;
  int square = 5.square;
  assert(square == 25);
}

Thanks, SDB@79

April 11, 2022

On Monday, 11 April 2022 at 09:11:06 UTC, Salih Dincer wrote:

>

How is this possible? Why is it compiled? Don't the same names in the same scope conflict?

int function(int) square;
void main()
{
  square = (int a) => a * a;
  int square = 5.square;
  assert(square == 25);
}

Thanks, SDB@79

you can use explicit call parenthesis to make the difference between the local var and the global func. Also you have the module access operator and the fully qualified name as alternatives to select the one you wish to.

April 11, 2022
On 11.04.22 11:11, Salih Dincer wrote:
> How is this possible? Why is it compiled? Don't the same names in the same scope conflict?
> 
> ```d
> int function(int) square;
> void main()
> {
>    square = (int a) => a * a;
>    int square = 5.square;
>    assert(square == 25);
> }
> ```
> 
> Thanks, SDB@79

- Local variables in a function can hide variables in less nested scopes. (Such hiding is only an error for nested block scopes within the same function.)

- UFCS always looks up names in module scope, it does not even check locals.