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

Steven Schveighoffer schveiguy at yahoo.com
Mon May 18 07:42:36 PDT 2009


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



More information about the Digitalmars-d mailing list