意外失败:存在于 raku 中
Unexpected FAIL with :exists in raku
在尝试调试程序代码时,我 运行 进入以下内容:
(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 起作用。 'Element of keys' 提供了一种解决方法,但我认为这不是检查密钥是否存在的正确方法?
您使用 ~ 在 Str
上下文中放置了匹配项,但我认为问题在于您的情况是您对变量使用了文字引号 <>
。 %h<$n>
returns 与文字键 $n 对应的值。您需要使用 %h{$n} 来检索与 $n
的内容对应的值。此外,如果 $n 包含一个 Match
它将被放入 Str 上下文中,这样应该可以工作。
<a b c>
是 qw<a b c>
.
的快捷方式
最终会变成 'a', 'b', 'c'
通过键访问哈希的方法是 {}
%h{'a', 'b', 'c'}
这样写会更好:
%h{<a b c>}
如果去掉 {}
会更好
%h<a b c>
这就是为什么这是有效的 Raku 语法。
所以当你这样写的时候:
%h<$n>
基本相同:
%h{'$n'}
如果您只访问一个元素,并且它没有空格。
而不是一直这样做:
%h{'abc'}
直接使用更简单:
%h<abc>
这就是为什么所有文档都使用该形式的原因。
同样这些也是一样的:
$/{<a b c>}
$/<a b c>
$<a b c>
因此,如果您看到 $<abc>
,它实际上是在 $/
内部查找与键 abc
.
关联的值
Raku 中有很多语法重用。 <>
就是这样一个例子。
注:
您不需要在具有 ∈
的哈希上使用 .keys
。
'B' ∈ %h; # True
(由于 Raku 对不同的操作使用不同的运算符,因此您很少需要进行此类数据处理。)
在尝试调试程序代码时,我 运行 进入以下内容:
(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 起作用。 'Element of keys' 提供了一种解决方法,但我认为这不是检查密钥是否存在的正确方法?
您使用 ~ 在 Str
上下文中放置了匹配项,但我认为问题在于您的情况是您对变量使用了文字引号 <>
。 %h<$n>
returns 与文字键 $n 对应的值。您需要使用 %h{$n} 来检索与 $n
的内容对应的值。此外,如果 $n 包含一个 Match
它将被放入 Str 上下文中,这样应该可以工作。
<a b c>
是 qw<a b c>
.
的快捷方式
最终会变成 'a', 'b', 'c'
通过键访问哈希的方法是 {}
%h{'a', 'b', 'c'}
这样写会更好:
%h{<a b c>}
如果去掉 {}
%h<a b c>
这就是为什么这是有效的 Raku 语法。
所以当你这样写的时候:
%h<$n>
基本相同:
%h{'$n'}
如果您只访问一个元素,并且它没有空格。
而不是一直这样做:
%h{'abc'}
直接使用更简单:
%h<abc>
这就是为什么所有文档都使用该形式的原因。
同样这些也是一样的:
$/{<a b c>}
$/<a b c>
$<a b c>
因此,如果您看到 $<abc>
,它实际上是在 $/
内部查找与键 abc
.
Raku 中有很多语法重用。 <>
就是这样一个例子。
注:
您不需要在具有 ∈
的哈希上使用 .keys
。
'B' ∈ %h; # True
(由于 Raku 对不同的操作使用不同的运算符,因此您很少需要进行此类数据处理。)