Subrange type

Ali Çehreli acehreli at yahoo.com
Mon Jan 27 22:05:57 UTC 2020


On 1/27/20 1:15 PM, Herbert wrote:
> On Monday, 27 January 2020 at 20:15:33 UTC, Steven Schveighoffer wrote:
>> On 1/27/20 3:06 PM, Herbert wrote:
>>> How can I create a subrange type, for example ushort DiceValue {1 ... 
>>> 6}?
>>
>> D doesn't have a "Range" type like this. But you can use ranges of 
>> different types by typing the literals. Note that D numeric ranges are 
>> always exclusive at the upper end.
>>
>> e.g.:
>>
>> ushort(1) .. ushort(6+1)
>>
>> -Steve
> 
> Thank you Steven!
> 
> How can I have a function parameter with this type (DiceValue)?
> 

There is also iota() than generates a range:

import std.stdio;
import std.range;

void foo(R)(R range) {
   pragma(msg, "Element type: ", ElementType!R);

   writefln!"Using as a range:\n%-(%s\n%)"(range);

   writeln("Using in a foreach loop:");

   foreach (element; range) {
     writeln(element);
   }
}

void main() {
   auto range = iota(ushort(1), ushort(7));
   foo(range);
}

The output:

Using as a range:
1
2
3
4
5
6
Using in a foreach loop:
1
2
3
4
5
6

Ali


More information about the Digitalmars-d-learn mailing list