在Rakudo Perl 6中item
或$
可用於評估項目上下文中的表達式。請參閱https://docs.perl6.org/routine/item如何將一個項目的contextualized數組分配給一個位置?
我正在使用返回項目contextualized數組的庫。什麼是刪除情景化的正確方法,以便將其分配給@
變量?
例如:
my @a = $[<a b c>];
dd @a; # Outputs: Array @a = [["a", "b", "c"],]
在Rakudo Perl 6中item
或$
可用於評估項目上下文中的表達式。請參閱https://docs.perl6.org/routine/item如何將一個項目的contextualized數組分配給一個位置?
我正在使用返回項目contextualized數組的庫。什麼是刪除情景化的正確方法,以便將其分配給@
變量?
例如:
my @a = $[<a b c>];
dd @a; # Outputs: Array @a = [["a", "b", "c"],]
的Perl是Perl中,有不止一種方法來做到這一點,如
dd my @ = @$[<a b c>]; # via original array, equivalent to .list
dd my @ = $[<a b c>][]; # via original array, using zen slicing
dd my @ = |$[<a b c>]; # via intermediate Slip, equivalent to .Slip
dd my @ = $[<a b c>].flat; # via intermediate flattening Seq
最明確的解決方案可能通過@
或.list
強制執行列表上下文,我會避免.flat
調用,因爲它具有略微不同的語義內涵。
就像提醒一樣,請注意列表分配是複製,但如果您使用的是從標量容器中取出原始數組的其中一種方法,則還可以使用綁定。然而,在這種情況下,你甚至不會需要手動decontainerize作爲
dd my @ := $[<a b c>];
也得到你回你的陣列的東西列表-Y。
壓平:
my @a = $[<a b c>].flat;
dd @a; # Array @a = ["a", "b", "c"]
替代方法是前綴'|'將其滑入數組(即'@a = | $ []')或後綴'[]'來取回一個decontainerized禪片(即'@a = $ [ ] []') – Christoph
,當然還有前綴'@',d'哦(即'@a = @ $') – Christoph
@Christoph偉大的想法。你爲什麼不用所有這些寫出你自己的答案?我肯定會贊成它。 –
Aiui'''如果綁定,自動被剝離(即多餘),即'dd my @:= [];'與'dd my @:= $ [];'得到相同的結果;'。 – raiph