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