How can I check if an element is iterable?

Ali Çehreli acehreli at yahoo.com
Mon May 4 01:49:28 UTC 2020


On 5/3/20 1:44 PM, Marcone wrote:
> On Sunday, 3 May 2020 at 20:11:58 UTC, Adam D. Ruppe wrote:
>> On Sunday, 3 May 2020 at 20:02:09 UTC, Marcone wrote:
>>> How can I check if an element is iterable in Dlang?
>>
>> http://dpldocs.info/experimental-docs/std.traits.isIterable.html
> 
> I don't want to check if type is iterable, but if variable is iterable.

Still, the type of a variable would determine whether whether it's iterable.

As an improvement, the following program can be changed to call use() 
recursively to visit all members of e.g. structs (which can be 
determined by 'is (T == struct)').

import std.stdio;
import std.traits;

void use(T)(T var, size_t indent = 0) {
   static if (isIterable!T && !isSomeString!T) {
     foreach (i, e; var) {
       writefln!"%*s: %s"(indent, i, e);
     }

   } else {
     writefln!"%*s"(indent, var);
   }
}

void main() {
   int i = 42;
   string s = "hello";
   double[] arr = [ 1.5, 2.5, 3.5 ];
   use(i);
   use(s);
   use(arr);
}

Ali


More information about the Digitalmars-d-learn mailing list