[Issue 3395] Ambiguous array operations

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Nov 29 13:32:29 PST 2011


http://d.puremagic.com/issues/show_bug.cgi?id=3395


Stewart Gordon <smjg at iname.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |smjg at iname.com


--- Comment #2 from Stewart Gordon <smjg at iname.com> 2011-11-29 13:31:26 PST ---
(In reply to comment #0)
> These expressions are ambiguous:
> ---
> a[].max(n);
> a[1..4].max(n);
> ---
> Does it mean calling the function on the slice or on each item in the slice?

It means calling the function on the slice.  Unless I'm mistaken, there isn't
any D syntax at the moment that means calling the function on each element of
the array.

> Possible solution is to change the meaning of empty square brackets from full
> slice to only a hint for array operation so that a[].max(n) is an array
> operation and a[1..4].max(n) is max(a[1..4],n).

This would get confusing.  You might want to apply a function to the whole
slice [1..4] or to each element of the slice.  This applies whether the
array-property sugar is being used or not.

Perhaps the best solution is to define [] applied to the function identifier
itself to do an elementwise application.

So max(a, n) or a.max(n) would just call max(a, n) once.
And max[](a, n) or a.max[](n) would evaluate to an array of max(a[i], n).
And the same if a is replaced with a[], a[1..4] or some such in each case.

Of course, ambiguities can still occur in functions with multiple array
parameters.  Presumably the language would forbid it in these ambiguous cases,
as it does already with ambiguous overload matching.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list