foreach (x; a .. b) and foreach_reverse (x; a .. b) should be disallowed for floats

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Mon May 18 09:03:54 PDT 2009


Steven Schveighoffer wrote:
> On Mon, 18 May 2009 09:54:16 -0400, Jacob Carlborg <doob at me.com> wrote:
> 
>> Steven Schveighoffer wrote:
>>> On Sun, 17 May 2009 20:28:24 -0400, Andrei Alexandrescu 
>>> <SeeWebsiteForEmail at erdani.org> wrote:
>>>
>>>> Consider:
>>>>
>>>>      foreach (x; 1.0 .. 4.1) writeln(x);
>>>>      foreach_reverse (x; 1.0 .. 4.1) writeln(x);
>>>>
>>>> This sucks. foreach with interval for floating-point types should be 
>>>> disallowed.
>>>  foreach_reverse sucks in its own right, while you're looking for 
>>> stuff to get rid of, I think it can be done better.
>>>  foreach(x; 4 .. 1 ) should do a reverse interval (and looks way more 
>>> readable).
>>> foreach(x; array.reverse) should iterate in reverse.
>>>  for classes, using a method called reverse should work fine:
>>>  foreach(x; myclass.reverse)
>>>  Having to implement opApplyReverse is rediculous, and having a 
>>> keyword like foreach_reverse is rediculous.  Reverse isn't the only 
>>> interesting iteration pattern, so why focus a whole keyword and 
>>> syntax on that?
>>>  -Steve
>>
>> I agree with that, but how would you differ foreach(x; array.reverse) 
>> from the array.reverse that modifies the array?
> 
> D'oh! I picked the wrong property name.  Forgot about the existing 
> reverse property!
> 
> Just to clarify, I am *not* advocating that the propery way to iterate 
> an array in reverse is to first reverse the array!
> 
> So pick some other property name:
> 
> foreach(x; array.backwards)
> 
> or whatever.  Too bad reverse is already taken :(
> 
> -Steve

sort and reverse for slices should go, by the way.

Andrei



More information about the Digitalmars-d mailing list