>> say @y.^WHAT > If you want to print the name use `.^name`.
> If you want the type object for more advanced usages use `.WHAT`. Sorry, typo on my part. Though that raises another syntactic oddity I might whine about: perl6 code examples frequently use ".WHAT". I was interested in getting a list of all available methods, so I started trying some guesses: ".METHODS", ".METHOD", ".methods".... But actually it's ".^methods". Okay, the caret is used for introspection... but then why isn't it ".^what"? (It also turns out that the list ".^methods" gives you is bizarre: hard to read, has many duplicates, unsorted, full of odd entries that look like internal use only widgets I don't care about just now...) On Tue, Jun 12, 2018 at 11:34 AM, Brad Gilbert <[email protected]> wrote: > On Tue, Jun 12, 2018 at 12:55 PM, Joseph Brenner <[email protected]> wrote: >> Thanks, both your suggestion and JJ Merelo's work, but I think I like >> yours for readability: >> >> # # using binding, suggested by JJ Merelo <[email protected]> >> # my @y := @x but LookInside; >> >> # suggested by Elizabeth Mattijsen [email protected] >> 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 <[email protected]> wrote: >>>> On 12 Jun 2018, at 09:06, Joseph Brenner <[email protected]> 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. >>>
