On Tue, Jun 12, 2018 at 12:55 PM, Joseph Brenner <doom...@gmail.com> wrote: > Thanks, both your suggestion and JJ Merelo's work, but I think I like > yours for readability: > > # # using binding, suggested by JJ Merelo <jjmer...@gmail.com> > # my @y := @x but LookInside; > > # suggested by Elizabeth Mattijsen l...@dijkmat.nl > my @y does LookInside = @x; > > I actually found the use of "but" in the objects docs to be > tremendously confusing at first: it looks like some sort of > conditional check, like "unless".
The reason `but` exists is basically for the following my $v = 0 but True; if $v { say $v } # prints 0 In Perl 5 it is common to return the string `"0 but true"` for a value that is both 0 and true. Since one of the design philosophies of Perl 6 is to reduce the number of special cases this was made to be more generally useful. Note that you should not do the following my $v = 0; $v does True; say 'WTF!' if 0; # prints WTF! Basically you can use `but` anywhere you like, but be careful with `does`. > On Tue, Jun 12, 2018 at 1:01 AM, Elizabeth Mattijsen <l...@dijkmat.nl> wrote: >>> On 12 Jun 2018, at 09:06, Joseph Brenner <doom...@gmail.com> wrote: >>> >>> I thought this would work to make a copy of @x but with the role >>> "LookInside" attached to it: >>> >>> my @y = @x but LookInside; >>> >>> But that didn't add the role to @y. E.g. That is effectively the same as: my @y = (@x but LookInside).map: *.self; That is @ sigiled variables tend to slurp in iterable values. >>> say @y.^WHAT If you want to print the name use `.^name`. If you want the type object for more advanced usages use `.WHAT`. >>> >>> Would just report (Array), not (Array+{LookInside}). >> >> What you’re doing here, is assigning the elements of an Array but Lookinside >> to a normal Array. The elements of the Array do not have any roles mixed >> in, so you wind up with a normal Array with normal elements in them. >> Perhaps you meant: >> >> my @y does LookInside = @x; >> >> Here you create an Array @y with the role LookInside mixed in, and *then* >> assign the values from @x. >>