定义一个结点my $j = 1 | 2 | 3 | 4 | 5,现在我想获得其值[1 2 3 4 5]的数组,我应该如何实现呢?

我尝试了$j.values,但是Perl6给了我整个结点:[any((1), (2), (3), (4), (5))]

最佳答案

正如HåkonHægland所指出的,这不是您应该做的事情:



但是,这是可能的。

首先,您可以使用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'));

关于arrays - 如何将结点中的值作为数组返回?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43568394/

10-08 22:35