Enums 从枚举的名称而不是值创建枚举

Enums 从枚举的名称而不是值创建枚举,enums,raku,Enums,Raku,给定枚举 enum NATO (:alpha<A>, :bravo<B>, :charlie<C>, :delta<D>); 除了使用EVAL并给定一个对应于其中一个枚举的Str,我如何创建$c作为与charlie等效的枚举值 my $x = 'charlie'; my $c = ... 您可以使用间接名称查找: enum NATO (:alpha<A>, :bravo<B>, :charlie<C>);

给定枚举

enum NATO (:alpha<A>, :bravo<B>, :charlie<C>, :delta<D>);
除了使用
EVAL
并给定一个对应于其中一个枚举的
Str
,我如何创建
$c
作为与
charlie
等效的枚举值

my $x = 'charlie';
my $c =  ...

您可以使用间接名称查找:

enum NATO (:alpha<A>, :bravo<B>, :charlie<C>);
my $x = 'charlie';
my $c = ::($x);
say $c.value;
enum北约(:alpha,:bravo,:charlie);
我的$x=‘查理’;
我的$c=:($x);
比如说$c.value;

您可以将其视为哈希:

my $c = NATO::{$x};

啊,我需要双冒号。我确实尝试过仅仅使用北约{$x},但没有任何效果。感谢您提供了一个很好的备选答案(它比@ugexe的长,但是对于
:($x)
无法清楚显示发生了什么的情况,
Foo:{$x}
会让它非常清晰。@guifa后面的
提供了一个符号表,其中包含所有枚举项。这就是
NATO:{…}
起作用的原因。
my $c = NATO::{$x};