这似乎是一个简单的问题,但是Perl6 / Raku的表现不符合我的预期。我试图在哈希中创建对数组的引用,但没有得到预期的行为。在Perl5中,答案将涉及通过引用访问数组,但我没有看到Perl6 / Raku的等效语法。
my $jsonstr = q:to/END/;
{
"arr" : [
"alpha","beta","delta","gamma"
]
}
END
my %json = from-json $jsonstr;
my @arr = %json{'arr'};
say "Arr length is " ~ @arr.elems; # Expect 4, get 1
say "Orig length is " ~ %json{'arr'}.elems; # Get expected value of 4
say "Arr[0] is " ~@arr[0].^name ~ " of length " ~ @arr[0].elems; # First index is array
say %json{'arr'}[0]; # Indexing into array in original location works as expected
say @arr[0][0]; # But when assigned, it needs an extra index
my @arr2 = @arr[0]; # Same issue in re-assignment here
say "Arr2[0]: " ~ @arr2[0] ~ ", length of " ~ @arr2.elems;
如何获得一个新的@arr变量来引用嵌套数组,而又不会造成这个令人困惑的额外[0]索引层?这是一个错误,还是我对Raku的Array / ref处理不了解?谢谢。
[当您将键arr
中的值分配给数组@arr
时,它将%json{'arr'}
中的值作为数组对象["alpha","beta","delta","gamma"]
并将其放入@arr
中,因此您将获得一个数组,其中1个项目。
您有几个选择:
您可以使用@arr
将%json{"arr"}
绑定到my @arr := %json{"arr"}
或者您可以使用%json{"arr"}
将my (@arr) = %json{"arr"}
传递到列表中>
您必须记住Raku Array的对象。
和往常一样,在写完并发表我的问题之后,我回答了自己的问题。