Dig*_*rat 8 arrays hash json raku
这似乎是一个简单的问题,但 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;
Run Code Online (Sandbox Code Playgroud)
如何获得一个新的 @arr 变量来引用嵌套数组,而不会出现这种令人困惑的额外 [0] 索引层?这是一个错误,还是我在理解 Raku 的 Array/ref 处理时遗漏了什么?谢谢。
当您将键中的值分配给arrArray 时,@arr它会获取%json{'arr'}Array 对象中的值["alpha","beta","delta","gamma"]并将其放入,@arr以便您获得一个包含 1 个项目的 Array 数组。
你有几个选择:
您可以绑定@arr到%json{"arr"}与my @arr := %json{"arr"}
或者您可以将 传递%json{"arr"}给列表my (@arr) = %json{"arr"}
你必须记住在 Raku Array 中是对象。