定義一個結my $j = 1 | 2 | 3 | 4 | 5
,現在我想獲得一個值爲[1 2 3 4 5]
的數組,我該如何實現這個?如何以數組的形式返回結點中的值?
我試過$j.values
但Perl6給了我整個連接點作爲一個元素:[any((1), (2), (3), (4), (5))]
。
定義一個結my $j = 1 | 2 | 3 | 4 | 5
,現在我想獲得一個值爲[1 2 3 4 5]
的數組,我該如何實現這個?如何以數組的形式返回結點中的值?
我試過$j.values
但Perl6給了我整個連接點作爲一個元素:[any((1), (2), (3), (4), (5))]
。
由於哈康Hægland已經指出的那樣,這是不是你應該做的事:
結意味着被用作布爾上下文匹配器;不支持路口的反省。如果你覺得反省交界處的衝動,請改用Set或相關類型。
然而,這是可能的。
首先,可以使用authothreading(即,當傳遞到預計Any
類型的參數的函數的結的每個分支的自動評估):
sub unjunc(Junction $j) {
gather -> Any $_ { .take }.($j);
}
其次,可以捅到膽並手動提取值:如果您的交界處非遞歸
sub unjunc(Junction $j) {
multi extract(Any $_) { .take }
multi extract(Junction $_) {
use nqp;
my $list := nqp::getattr($_, Junction, '$!storage');
my int $elems = nqp::elems($list);
loop (my int $i = 0; $i < $elems; $i = $i + 1) {
extract nqp::atpos($list, $i);
}
}
gather extract $j;
}
(即不包含要弄平其他路口),後一種方法可以簡化爲:
my $j := 1|2|3;
say nqp::p6bindattrinvres(nqp::create(List), List, '$!reified',
nqp::getattr($j, Junction, '$!storage'));
據我所知,這是故意的。假設$ j包含哈希交點:然後$ j.values將是Seq的交點,而不是哈希本身。
如果你想結的陣列,那麼也許你應該從一個數組開始,建設結出的是:
my @a = 1,2,3,4,5;
my $j = any(@a);
如果你真的想去的路口 - >陣方式,你可以,但它會涉及到使用nqp,這是我不建議在用戶級代碼。
這可以進一步簡化: 'my $ j = any my @a = 1,2,3,4,5;' – ab5tract
根據[文檔](https://docs.perl6.org/type/Junction):*「連接是用作布爾上下文中的匹配器;不支持內部連接。如果您覺得「* –