如何从函数传递指向容器的指针?
我可以将容器绑定到新名称:
my %h;
my $p := %h{ "a" }{ "b" }{ "c" };
$p = 1;
say %h;
预期输出:
{a => {b => {c => 1}}}
但是如果我需要从子程序返回这样的指针呢?
my %h;
sub get-pointer {
my $p := %h{ "a" }{ "b" }{ "c" };
return $p;
};
my $q := get-pointer();
$q = 1;
say %h;
给出:
Cannot assign to a readonly variable or a value
那件事让我感到困惑 -$p.WHERE
并$q.WHERE
给出相同的地址,那么为什么它突然变成只读的?
回答
没关系,我有一些隧道视野的时刻,并希望别名表现得像 C 指针。
发现它在Raku 文档中清楚地解释了。
sub 返回将返回值,而不是容器。那些是不可变的
要返回可变容器,请使用 return-rw。