digitalmars.D.learn - ref fields of .tupleof
- Sharp (23/23) May 29 2012 Hi all!
- Philippe Sigaud (4/7) May 29 2012 1;
- =?UTF-8?B?QWxpIMOHZWhyZWxp?= (4/12) May 29 2012 Looks like fields is a local copy of ret.tupleof so the following
- Sharp (4/4) May 29 2012 Thanks a lot Ali, I understand now!
- Jacob Carlborg (5/10) May 29 2012 If you want a serialization library:
Hi all! I've spend several hours to solve my problem, and I did it! But don't know why it is worked in this way: I'd like to modify all fields of an object by a specific values (for deserialization). public ref T foo(T)() { T *ret = new T; // DON'T WORK // Looping through fields in this way doesn't modify the object auto fields = ret.tupleof; foreach(ref field; fields) { field = 1; // this doesn't alter 'ret' } // WORK foreach(ref field; ret.tupleof) { field = 1; // this does alter it!!! } return *ret; } (Of course the real code doesn't use the value '1'. It uses values from an ubyte[] with the corresponding types of T's fields) Can somebody explain me why it is work like that? Thanks a lot.
May 29 2012
On Tue, May 29, 2012 at 9:18 PM, Sharp <sharp1113 hotmail.com> wrote: What does it give if you do:=C2=A0 =C2=A0 =C2=A0 =C2=A0foreach(index, unused; fields) { =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0fields[index] =3D =1;}?
May 29 2012
On 05/29/2012 12:18 PM, Sharp wrote:public ref T foo(T)() { T *ret = new T; // DON'T WORK // Looping through fields in this way doesn't modify the object auto fields = ret.tupleof;Looks like fields is a local copy of ret.tupleof so the following modifies just that copy.foreach(ref field; fields) { field = 1; // this doesn't alter 'ret' }Ali
May 29 2012
Thanks a lot Ali, I understand now! Philippe, based on what Ali said, your code will give exactly the same result because it looping through a local copy of ret.tupleof.
May 29 2012
On 2012-05-29 21:18, Sharp wrote:Hi all! I've spend several hours to solve my problem, and I did it! But don't know why it is worked in this way: I'd like to modify all fields of an object by a specific values (for deserialization).If you want a serialization library: https://github.com/jacob-carlborg/orange -- /Jacob Carlborg
May 29 2012