Ao tentar depurar o código do programa, encontrei o seguinte:
(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
>
Em suma, a questão é como você passa do objeto de correspondência para a cadeia de caracteres, de modo que% any: exist funcione. 'Elemento de chaves' fornece uma solução alternativa, mas acredito que não é a maneira correta de verificar a existência de chaves?
<a b c>
é um atalho paraqw<a b c>
.Que acabará como
'a', 'b', 'c'
A maneira de acessar um Hash por chave é com
{}
O que seria melhor escrever como:
O que seria ainda melhor é se livrar do
{}
É por isso que é válida a sintaxe Raku.
Então, quando você escreve isso:
É basicamente o mesmo que:
Se você estiver acessando apenas um elemento e ele não tiver espaço em branco.
Em vez de fazer isso o tempo todo:
É muito mais simples usar apenas:
É por isso que toda a documentação usa esse formulário.
Da mesma forma, estes também são os mesmos:
Portanto, se você vir,
$<abc>
ele está realmente procurando$/
o valor associado à chaveabc
.Há muita reutilização de sintaxe em Raku.
<>
é um desses casos.Nota:
Você não precisa usar
.keys
um Hash com∈
.(Como o Raku usa operadores diferentes para operações diferentes, é raro você precisar fazer essa massagem de dados.)
fonte