On Mon, 24 Jul 2017 01:54:53 -0700, elizabeth wrote:
> 
> > On 23 Jul 2017, at 22:27, Sam S. via RT <perl6-bugs-
> > follo...@perl.org> wrote:
> >
> >> Which then goes back to: what is the use case of Slipping an Array?
> >
> > Same as slipping any other type of Iterable: Fine-grained, elegant
> > flattening and concatenating.
> >
> > Compare:
> >
> > my @all = flat $first, @rest;
> >
> > my @all = $first, |@rest;
> >
> > When you *know* that $first is a Scalar and @rest is an Array, those
> > two do the same thing because `flat` doesn't descend into item
> > containers.
> >
> > But if those are, say, function parameters, then they can become
> > bound to other things, e.g. the calling code could pass a List to
> > `@rest` which *doesn't* have its elements itemized, so the version
> > with `flat` would destroy the elements' internal structure.
> >
> > Even if that wasn't the case, I'd consider the `|` version more
> > elegant than the `flat` version, because it denotes very clearly to
> > the reader *where* exactly something is being flattened into the
> > outer list.
> >
> >> because Slip is a List, it uses List.AT-POS, and that one
> >>  doesn’t create a WHENCE with a container to be filled at a later
> >> time.
> >
> > Couldn't `@array.Slip` be made to properly iterate @array behind the
> > scenes (the same way that `@array.map` would iterate it), instead of
> > reaching into @array's guts and copying its elements in a way that
> > misinterprets some of them?
> 
> Which is exactly what 12d7d5b48add8347eb119 does.
> 
> So fixed, and tests needed!


Tests added in https://github.com/perl6/roast/commit/24d5fcb486

However, the values for .List differ depending on how you access them. If you 
use iterator, you get a Mu for a hole, but if you use AT-POS you get a Nil..

    13:04       Zoffix  m: (my @a)[1] = Mu; my @b is default(42) = @a.List; say 
@b
    13:04       camelia         rakudo-moar b8eda6: OUTPUT: «[(Mu) (Mu)]␤»
    13:04       Zoffix  m: (my @a)[1] = Mu; my @b is default(42) = @a.List[*]; 
say @b
    13:04       camelia         rakudo-moar b8eda6: OUTPUT: «[42 (Mu)]␤»

I filed a separate ticket for that: 
https://rt.perl.org/Ticket/Display.html?id=132261

IRC: https://irclog.perlgeek.de/perl6-dev/2017-10-10#i_15283224

Reply via email to