On Sat, Nov 1, 2014 at 9:34 PM, Suliman via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com> wrote: > Few questions. > > 1. In examples tuples are created with keyword auto. Can I create them with > another keyword. Or auto mean structure of data, that have not standard type > like (int or string)?
`tuple' is a function defined in the std.typecons module. It's a helper function to create Tuple!(T...), a templated struct acting as a tuple. Don't forget the type will depend on the types of the arguments, so: auto tup = tuple(1.0, "abc", [2,3]); contains a float, a string and an array of int's, so it's type is Tuple!(float, string, int[]): Tuple!(float, string, int[]) tup = tuple(1.0, "abc", [2,3]); It's a bit long to type, so most people prefer using `auto' for such declarations. > > 2. How ti expend tuple? I tried to do: > > auto imglist = tuple("aaa"); > imglist.expand["sss"]; > writeln(imglist); > > but got very strange error: > app.d(30): Error: cannot implicitly convert expression ("sss") of type > string to uint Expand, you mean, as in appending to a tuple? It can be done, but it will create a new type. First, tup.expand gives you access to the 'raw' tuple ( a template parameter list, to be precise) underneath Tuple!(T...). The returned value can be indexed, sliced and its length is known at compile time. Continuing with my example: auto first = tup.expand[0]; // "1.0" auto slice = tup.expand[1..$]; // ("abc", [2,3]) auto len = tup.expand.length; // 3, since tup has three elements. That explains the error you get: imglist.expand is a bit like a vector: it can be indexed, but with uint, not with a string. I thought you were expanding it, but to the compiler you were trying to index using a string. If you really want to append to a tuple, you must create a new variable, since the augmented tuple will have a different type: auto tup2 = tuple(tup.expand, 'd'); // tup2 == (1.0, "abc", [2,3], 'd') The type of tup2 is then Tuple!(float, string, int[], char) Note that, in your case, as you're using only strings, an array of strings would probably be easier to use.