UFCS doubt

Antonio antonio at abrevia.net
Thu Jul 8 23:31:57 UTC 2021


On Thursday, 8 July 2021 at 22:31:49 UTC, Dennis wrote:
> On Thursday, 8 July 2021 at 22:24:26 UTC, Antonio wrote:
>> I supossed  that ```mfp(c,20)``` and ```c.mfp(20)``` should be 
>> equivalent because UFCS in second example, but it is not... 
>> why?
>
> UFCS does not work for nested functions.
>
>> Functions declared in a local scope are not found when 
>> searching for a matching UFCS function.
>> ...
>> Rationale: Local function symbols are not considered by UFCS 
>> to avoid unexpected name conflicts. See below problematic 
>> examples.
>
> https://dlang.org/spec/function.html#pseudo-member

Thanks.

I read the example and the assumption of "name conflict" does not 
seem to be justified (from my point of view)

i.e. Without dot notation, this example must fail
```
int front(int[] arr) { return arr[0]; }
void main()
{
     int[] a =[1,2,3];
     auto front = 1;       // front is now a variable
     auto y = front(a);   // Error, front is not a function
}
```
Changing to y = a.front() should not change the behavior (it is 
only a notation change )... but it does!!!
```
int front(int[] arr) { return arr[0]; }
void main()
{
     int[] a =[1,2,3];
     auto front = 1;       // front is now a variable
     auto y = a.front()     // NO ERROR!!!
}
```

"It works as described in the manual, not as expected" (from 
MySQL haters club :-p) .



More information about the Digitalmars-d-learn mailing list