digitalmars.D - tuple can write [],but can't read []
- FrankLike (40/40) Apr 29 2014 Hi,erveryone,
- Andrea Fontana (2/8) Apr 29 2014 If I'm right, index should be a compile-time value.
- bearophile (10/11) Apr 29 2014 Right. Because tuples in general don't contain N values of the
- FrankLike (3/11) Apr 29 2014 index is exists,but not be read,why?
- John Colvin (29/69) Apr 29 2014 Tuple indexes must be compile-time values. This will work:
- FrankLike (3/9) Apr 29 2014 Thank you,John Colvin,
Hi,erveryone, type Tuple!(int,int,int,string) can write[],but can't read[]; module main; import std.stdio,std.typecons,std.conv; void main(string[] argv) { alias Tuple!(int,int,string) tuple2; alias Tuple!(int,int,string)[10] tupleS2; void bbx(tupleS2 x) { foreach(v;x) { writeln(v); foreach(k;v) writeln(k); } } tupleS2 xy2; foreach(i,v;xy2) { xy2[i] = tuple2(1,-1,"xy2 :"~i.to!string); } xy2[1][0]=100; // can write bbx(xy2); for(int i=0;i<3;i++) { writeln(xy2[0][i]); // can't read } } -------------------code end---------------------- if use the 'for(int i=0;i<3;i++)' ,then error. Error: no [] operator overload for type Tuple!(int, int, int, int, int, int, int, int, int, int, int, string) Thank you. Frank
Apr 29 2014
On Tuesday, 29 April 2014 at 09:23:03 UTC, FrankLike wrote:Hi,erveryone, [...] xy2[1][0]=100; // can write [...] writeln(xy2[0][i]); // can't read [...]If I'm right, index should be a compile-time value.
Apr 29 2014
Andrea Fontana:If I'm right, index should be a compile-time value.Right. Because tuples in general don't contain N values of the same type (as in your case), so the compiler has to know statically the index to compute their position efficiently. Further similar questions are better asked in D.learn. I also suggest to not mix tab and spaces to indent code, configure your editor to use only spaces or only tabs (4 spaces is the D standard). Bye, bearophile
Apr 29 2014
On Tuesday, 29 April 2014 at 09:38:45 UTC, Andrea Fontana wrote:On Tuesday, 29 April 2014 at 09:23:03 UTC, FrankLike wrote:index is exists,but not be read,why? Thank you.Hi,erveryone, [...] xy2[1][0]=100; // can write [...] writeln(xy2[0][i]); // can't read [...]If I'm right, index should be a compile-time value.
Apr 29 2014
On Tuesday, 29 April 2014 at 09:23:03 UTC, FrankLike wrote:Hi,erveryone, type Tuple!(int,int,int,string) can write[],but can't read[]; module main; import std.stdio,std.typecons,std.conv; void main(string[] argv) { alias Tuple!(int,int,string) tuple2; alias Tuple!(int,int,string)[10] tupleS2; void bbx(tupleS2 x) { foreach(v;x) { writeln(v); foreach(k;v) writeln(k); } } tupleS2 xy2; foreach(i,v;xy2) { xy2[i] = tuple2(1,-1,"xy2 :"~i.to!string); } xy2[1][0]=100; // can write bbx(xy2); for(int i=0;i<3;i++) { writeln(xy2[0][i]); // can't read } } -------------------code end---------------------- if use the 'for(int i=0;i<3;i++)' ,then error. Error: no [] operator overload for type Tuple!(int, int, int, int, int, int, int, int, int, int, int, string) Thank you. FrankTuple indexes must be compile-time values. This will work: import std.stdio, std.typecons, std.conv, std.typetuple; void main() { alias Tuple!(int, int, string) tuple2; alias Tuple!(int, int, string)[10] tupleS2; void bbx(tupleS2 x) { foreach(v; x) { writeln(v); foreach(k;v) writeln(k); } } tupleS2 xy2; foreach(i, v; xy2) { xy2[i] = tuple2(1, -1, "xy2 :" ~ i.to!string); } xy2[1][0]=100; bbx(xy2); foreach(i; TypeTuple!(0,1,2)) { writeln(xy2[0][i]); } }
Apr 29 2014
On Tuesday, 29 April 2014 at 09:53:29 UTC, John Colvin wrote: foreach(i; TypeTuple!(0,1,2)) { writeln(xy2[0][i]); } }Thank you,John Colvin, It works very good. Frank.
Apr 29 2014