如何从函数传递指向容器的指针?

Paw*_*bkr 11 raku

我可以将容器绑定到新名称:

my %h;
my $p := %h{ "a" }{ "b" }{ "c" };
$p = 1;
say %h;
Run Code Online (Sandbox Code Playgroud)

预期输出:

{a => {b => {c => 1}}}
Run Code Online (Sandbox Code Playgroud)

但是如果我需要从子程序返回这样的指针呢?

my %h;
sub get-pointer {
    my $p := %h{ "a" }{ "b" }{ "c" };
    return $p;
};
my $q := get-pointer();
$q = 1;
say %h;
Run Code Online (Sandbox Code Playgroud)

给出:

Cannot assign to a readonly variable or a value
Run Code Online (Sandbox Code Playgroud)

那件事让我感到困惑 -$p.WHERE$q.WHERE给出相同的地址,那么为什么它突然变成只读的?

Paw*_*bkr 16

没关系,我有一些隧道视野的时刻,并希望别名表现得像 C 指针。

发现它在Raku 文档中清楚地解释了。

sub 返回将返回值,而不是容器。那些是不可变的

要返回可变容器,请使用 return-rw。