On Thu, 16 Apr 2015 13:05:48 -0700
"H. S. Teoh via Digitalmars-d-learn" <digitalmars-d-learn@puremagic.com> wrote:

> On Thu, Apr 16, 2015 at 07:55:52PM +0000, Bayan Rafeh via Digitalmars-d-learn
> wrote:
> > Executing this code:
> > 
> > import std.container.array;
> > import std.stdio;
> > 
> > 
> > int main() {
> >     writeln(Array!int([1, 2]));
> >     return 0;
> > }
> > 
> > outputs the following:
> > 
> > Array!int(RefCounted!(Payload,
> > cast(RefCountedAutoInitialize)0)(RefCountedStore(B694B0)))
> > 
> > 
> > The strange thing is that this works fine:
> > 
> > import std.container.array;
> > import std.stdio;
> > 
> > int main() {
> >     writeln(Array!int([1, 2])[0..$]);
> >     return 0;
> > }
> > 
> > [1, 2]
> > 
> > How am I supposed to interpret this?
> 
> Try slicing the Array before passing it to writeln?
> 
>       writeln(Array!int([1, 2])[]);
> 
> Basically, there is a distinction between a container and a range that
> spans the items in a container. The conventional syntax for getting a
> range over a container's contents is the slicing operator [].
> 
> 
> T
> 

Yep, but problem is almost no one expect this, or know this. We definitely
should do better.

Reply via email to