Hi all, Andy Bach contacted me off list, to say my postscript comment about "prepending" (versus "appending") to a hash object was nonsensical. I agree.
Hashes in Raku/Perl6 are guaranteed to be unordered upon return. So once they are declared, it doesn't make sense to think of them as a (double-ended) linear array of pairs. --Bill. P.S. Link to the ",=" Postfix operator: https://docs.raku.org/routine/,= On Thu, Mar 19, 2020 at 10:33 AM William Michels <w...@caa.columbia.edu> wrote: > > Okay, here's another (simpler?) approach using the ",= " postfix operator: > > mbook:~ homedir$ perl6 > To exit type 'exit' or '^D' > > my %stash; > {} > > my @monsters = << godzilla grendel wormface blob >>; > [godzilla grendel wormface blob] > > my @rabbits = << bugs peter easter >>; > [bugs peter easter] > > %stash ,= monsters => @monsters > {monsters => [godzilla grendel wormface blob]} > > %stash ,= :@rabbits > {monsters => [godzilla grendel wormface blob], rabbits => [bugs peter easter]} > > say %stash > {monsters => [godzilla grendel wormface blob], rabbits => [bugs peter easter]} > > exit > mbook:~ homedir$ perl6 -v > This is Rakudo version 2019.07.1 built on MoarVM version 2019.07.1 > implementing Perl 6.d. > > HTH, Bill. > > PS. Note, above shows how to 'postfix' (i.e. append), but I'm still > unclear on how to prepend to a pre-existing hash. > > > On Tue, Mar 17, 2020 at 11:15 AM Joseph Brenner <doom...@gmail.com> wrote: > > > > Yes you're right: I could've sworn I tried that in the repl a minute > > ago and it worked, but actually it's a no-op and appends nothing to > > the hash. > > > > This is okay, doing it the other way (without the inner parens around > > the colonpair) is not: > > > > ny %stash; > > my @monsters = << godzilla grendel wormface blob >>; > > my @rabbits = << bugs peter easter >>; > > > > %stash.append( (:@monsters) ); > > %stash.append( (:@rabbits) ); > > > > say %stash; > > > > > > On 3/17/20, Vadim Belman <vr...@lflat.org> wrote: > > > > > > Joseph, you've got yourself into a trap I fell into yesterday. > > > %stash.append( :@stuff ) syntax is about calling append method with a > > > named > > > parameter stuff whereas append works with positionals only. So, your case > > > should be written: > > > > > > %stash.append( (:@stuff) ); > > > > > > Which is apparently more cumbersome. In either case, use of colons is not > > > always about saving a character or two. Sometimes it's about readability, > > > sometimes about elegance. Overuse is surely bad, but overuse of anything > > > is > > > bad, for that matter. :) > > > > > > Best regards, > > > Vadim Belman > > > > > >> On Mar 17, 2020, at 1:09 PM, Joseph Brenner <doom...@gmail.com> wrote: > > >> > > >>> Though I've no idea what those colons are/are not doing. > > >> > > >> Those are "colon pairs" (which I've relearned around three times now...): > > >> > > >> https://docs.raku.org/language/glossary#index-entry-Colon_Pair > > >> <https://docs.raku.org/language/glossary#index-entry-Colon_Pair> > > >> > > >> Except for this colon: > > >> > > >> %stash.append: (rocks => @rocks); > > >> > > >> Which is a short hand for this: > > >> > > >> %stash.append( (rocks => @rocks) ); > > >> > > >> As an aside: it's a minor style point, but I think a lot of > > >> us overuse that trick-- it saves a character, but the explicit > > >> parens are more flexible. > > >> > > >> Notably this works fine, so here it doesn't even save any > > >> characters: > > >> > > >> %stash.append( :@stuff ); > > >> > > >> > > > > > >