Automatic Foreach
janderson
askme at me.com
Sun Apr 27 01:42:07 PDT 2008
Bill Baxter wrote:
> janderson wrote:
>> Bill Baxter wrote:
>>> janderson wrote:
>>>> Bill Baxter wrote:
>>>>> janderson wrote:
>>>>>> What do you think?
>>>>>
>>>>> I think it's already hard enough to figure out what's going to get
>>>>> called by something like foo(array)
>>>>>
>>>>> It could be
>>>>> - foo(int[] x)
>>>>> - foo(int[] x...)
>>>>> - foo(T)(T x)
>>>>> - foo(T)(T[] x)
>>>>> - foo(T...)(T x)
>>>>> - struct foo { static foo opCall(int[]); }
>>>>> - struct foo { static foo opCall(int[]...); }
>>>>> - struct foo { static foo opCall(T)(T x); } etc
>>>>> - or struct Foo with non-static opCall on instance foo
>>>>> - or all the same stuff on class ...
>>>>>
>>>>> So I don't think another meaning for foo(array) is really helpful.
>>>>>
>>>>> I *do* like the idea of an expression (not a statement) that has
>>>>> foreach-like abilities. But I think it should come with some
>>>>> distinguishing syntax.
>>>>>
>>>>> In Python it's just [expr(x) for x in array]
>>>>> Which resonates with Pythons normal loopoing:
>>>>> for x in array: expr(x)
>>>>>
>>>>> So direct translation of that idea to D would be
>>>>> [expr(x) foreach(x; array)];
>>>>>
>>>>> Seems not so terrible a syntax to me.
>>>>>
>>>>> --bb
>>>>
>>>> I think I prefer:
>>>>
>>>> foo(array[]);
>>>
>>> I think that already means call foo with a full slice of array,
>>> doesn't it? Anyway, even if it doesn't you can overload opSlice()
>>> currently so that array[] can mean anything you want it to.
>>>
>>> --bb
>>
>> That's the point though. If there's already an overload available
>> then that should be used. It allows you to come along later and write
>> specialized behavior.
>
> Ok I suppose. As long as you're aware what your proposing will break
> existing code, which means the barrier for accepting the proposal will
> be a lot higher.
>
> --bb
How?
More information about the Digitalmars-d
mailing list