develooper Front page | perl.perl6.users | Postings from July 2021

Re: [naive] hash assingment

Thread Previous | Thread Next
From:
Daniel Sockwell
Date:
July 14, 2021 19:41
Subject:
Re: [naive] hash assingment
Message ID:
1c1484cb8247afc2c53dd6236e45ed36@codesections.com
To expand slightly on what Clifton said, the reason that

> %a<column3> = %a<column1>.map: { .sqrt };
> # (1 1.4142135623730951 1.7320508075688772 2 2.23606797749979)

does what you mean but 

> %a{'column1'} ==> map( { .sqrt } )
> # (2.23606797749979)

does not is that the method .map maps over *each item* in the Array, whereas
==> map maps over the Array as *one collection*.  When taking the square root,
an Array needs to be treated as an number, which for Raku means treating it as 
a count of how many elements it has (i.e., its length).

So `%a{'column1'} ==> map({.sqrt})` is the same as `%a{'column1'}.elems.map({.sqrt})`

If want to map over each item in the Array when using the ==> operator, you need to
slip the items out of the Array before feeding them on.  You can do that with either
of the following (equivalent) lines:

> %a{'column1'}.Slip ==> map({.sqrt});
> |%a{'column1>'}==> map({.sqrt});

(Also, you may already know this, but when the keys of your hash are strings, you 
can write %a<column1> instead of %a{'column1'}  )

Hope that helps!

–codesections

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About