在尝试调试程序代码时,我遇到了以下问题:
(base) hsmyers@BigIron:~$ rlwrap -A raku
To exit type 'exit' or '^D'
> my regex N { <[A..G]> };
regex N { <[A..G]> }
> my %h = A => 1, B => 2;
{A => 1, B => 2}
> 'B' ∈ %h.keys
True
> my $m = 'B' ~~ / <N> /;
「B」
N => 「B」
> $m ∈ %h.keys
False
> $m.Str ∈ %h.keys
True
> my $n = $m.Str
B
> $n ∈ %h.keys
True
> %h<B>:exists
True
> %h<$n>:exists
False
>
总之,问题是你如何从匹配对象到字符串,这样 %whatever:exists 将起作用。 “键元素”提供了一种解决方法,但我认为这不是检查键是否存在的正确方法?
最佳答案
您将匹配项放入 Str
使用 ~ 上下文,但我认为问题在于您使用的是文字引号 <>
对于一个变量。 %h<$n>
返回与文字键 $n 对应的值。您需要使用 %h{$n} 来检索 $n
的内容对应的值.此外,如果 $n 包含 Match
它将被放在 Str 上下文中,因此应该可以工作。
关于hash - :exists in raku 意外失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60495101/