www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Does D have object wrappers for primitives?

reply stunaep <admin pea2nuts.com> writes:
I have some java code I need to convert and at one point it uses 
an Object[] array to store various ints, longs, and strings. Java 
has built in Integer and Long classes that wrap the primitives in 
an object and strings are already objects.
Jul 29 2016
parent reply Cauterite <cauterite gmail.com> writes:
On Friday, 29 July 2016 at 20:13:34 UTC, stunaep wrote:
 I have some java code I need to convert and at one point it 
 uses an Object[] array to store various ints, longs, and 
 strings. Java has built in Integer and Long classes that wrap 
 the primitives in an object and strings are already objects.
No, but with a template you could easily make your own: class Boxed(T) { T _v; alias _v this; this(in T v) immutable {_v = v;}; }; auto i = new Boxed!int(6);
Jul 29 2016
next sibling parent reply =?UTF-8?Q?Ali_=c3=87ehreli?= <acehreli yahoo.com> writes:
On 07/29/2016 01:25 PM, Cauterite wrote:
 On Friday, 29 July 2016 at 20:13:34 UTC, stunaep wrote:
 I have some java code I need to convert and at one point it uses an
 Object[] array to store various ints, longs, and strings. Java has
 built in Integer and Long classes that wrap the primitives in an
 object and strings are already objects.
No, but with a template you could easily make your own: class Boxed(T) { T _v; alias _v this; this(in T v) immutable {_v = v;}; }; auto i = new Boxed!int(6);
I was going to suggest Algebraic because it allows arrays of mixed primitive types (wrapped in Algebraic): https://dlang.org/phobos/std_variant.html#.Algebraic Ali
Jul 29 2016
parent reply Cauterite <cauterite gmail.com> writes:
On Friday, 29 July 2016 at 20:26:47 UTC, Ali Çehreli wrote:
 I was going to suggest Algebraic because it allows arrays of 
 mixed primitive types (wrapped in Algebraic):

   https://dlang.org/phobos/std_variant.html#.Algebraic

 Ali
It could work, but keep in mind Algebraic is a structure, not an object.
Jul 29 2016
parent =?UTF-8?Q?Ali_=c3=87ehreli?= <acehreli yahoo.com> writes:
On 07/29/2016 01:40 PM, Cauterite wrote:
 On Friday, 29 July 2016 at 20:26:47 UTC, Ali Çehreli wrote:
 I was going to suggest Algebraic because it allows arrays of mixed
 primitive types (wrapped in Algebraic):

   https://dlang.org/phobos/std_variant.html#.Algebraic

 Ali
It could work, but keep in mind Algebraic is a structure, not an object.
Also, I've later noticed that your Box was a class, so it would allow "arrays of mixed primitive types" as well. Yes, Algebraic is not a struct but Java not having structs doesn't mean that the original code really needed classes either. :) Ali
Jul 29 2016
prev sibling parent reply stunaep <admin pea2nuts.com> writes:
On Friday, 29 July 2016 at 20:25:16 UTC, Cauterite wrote:
 On Friday, 29 July 2016 at 20:13:34 UTC, stunaep wrote:
 I have some java code I need to convert and at one point it 
 uses an Object[] array to store various ints, longs, and 
 strings. Java has built in Integer and Long classes that wrap 
 the primitives in an object and strings are already objects.
No, but with a template you could easily make your own: class Boxed(T) { T _v; alias _v this; this(in T v) immutable {_v = v;}; }; auto i = new Boxed!int(6);
Thank you. This is just what I needed. I am curious though as to why this doesn't work with strings. It would work if I removed immutable from the Boxed constructor but I thought strings were immutable. I get a compiler error 'not callable using a mutable object'. Even marking a string with the immutable keyword has the same result.
Jul 29 2016
parent Cauterite <cauterite gmail.com> writes:
On Saturday, 30 July 2016 at 04:12:45 UTC, stunaep wrote:

 Thank you. This is just what I needed. I am curious though as 
 to why this doesn't work with strings. It would work if I 
 removed immutable from the Boxed constructor but I thought 
 strings were immutable. I get a compiler error 'not callable 
 using a mutable object'. Even marking a string with the 
 immutable keyword has the same result.
auto s = new immutable(Boxed!string)(`foo`); what it's saying is that the box itself needs to be immutable. Honestly I don't know why it was even possible to make a mutable box in the first place, when the only constructor is marked `immutable`.
Jul 30 2016