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) .