在 Raku 中对哈希键和值使用 any 或 none

Lar*_*een 4 hash raku

我正在尝试在这样的散列的键或值上使用anynone

my %w=(a => 1, b => 2);
say %w.keys; # works
say so 'a' == %w.keys.any; # doesn't work
Run Code Online (Sandbox Code Playgroud)

我已经检查了 Raku 文档的哈希和地图部分,但无法解决这个问题。如何解决?谢谢。

Jon*_*ton 11

代码是这样死掉的:

Cannot convert string to number: base-10 number must begin with
valid digits or '.' in '?a' (indicated by ?)
Run Code Online (Sandbox Code Playgroud)

发生这种情况是因为==是数字比较运算符,因此它在进行比较之前首先尝试将参数强制转换为数字。

哈希键(至少默认情况下)是字符串,因此eq这里需要字符串比较运算符:

my %w=(a => 1, b => 2);
say so 'a' eq %w.keys.any; # True
Run Code Online (Sandbox Code Playgroud)

  • 请注意,出于性能原因,您可能最好使用 `(elem)` 集合运算符:`say "a" (elem) %h.keys`。一旦遇到与“a”匹配的键(没有实际创建“Set”),这就会短路。也可能是为了可读性:-) (2认同)