簡體   English   中英

如何遍歷 Raku 哈希中的數組?

[英]How do I iterate through an array inside a Raku hash?

這似乎是一個簡單的問題,但 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 中是對象。

像往常一樣,在寫完+發布我的問題后,我回答了我自己的問題。

my @arr = %json{'arr'}.Array;

我不太明白為什么這是必要的,但它提供了所需的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM