opApply Vs. Ranges: What should take precedence?

Steven Schveighoffer schveiguy at yahoo.com
Mon Nov 23 04:27:15 PST 2009


On Fri, 20 Nov 2009 19:32:10 -0500, Bill Baxter <wbaxter at gmail.com> wrote:

> On Fri, Nov 20, 2009 at 4:22 PM, Justin Johansson <no at spam.com> wrote:
>> Bill Baxter wrote:
>>>
>>> On Fri, Nov 20, 2009 at 3:36 PM, Walter Bright
>>> <newshound1 at digitalmars.com> wrote:
>>>>
>>>> And here I was thinking perhaps opApply should just be dumped in  
>>>> favor of
>>>> ranges.
>>>>
>>>
>>> I think the opApply should take precedence.
>>> The only reason to define opApply is because foreach uses it.
>>> Ranges on the other hand are useful in other situations.
>>>
>>> --bb
>>
>> Is is absolutely necessary for opApply to take a ref parameter?  (I'm  
>> asking
>> from D1 familiarity not D2 so question might not be relevant).
>>
>> My understanding is that by taking a ref parameter there is an  
>> additional
>> pointer dereference to get to the actual datum that is the subject of
>> current application.  Of course the current regime does appear to allow  
>> a
>> foreach to modify the items in the "container" being iterated over,  
>> though
>> myself, I've only ever used foreach in readonly mode.
>
> Making the delegate's arg "const ref" seems to work in D2.
> And prevents writing to the argument, as expected.

It still requires an lvalue, which is not always convenient...

I have proposed an enhancement for this, see  
http://d.puremagic.com/issues/show_bug.cgi?id=2443

-Steve



More information about the Digitalmars-d mailing list