考虑到枚举类型
enum NATO (:alpha<A>, :bravo<B>, :charlie<C>, :delta<D>);
可以通过直接输入名称之一或将一个值传递给枚举对象来轻松设置变量:
my $a = alpha;
my $b = NATO('B');
say $a; # ↪︎ alpha
say $b; # ↪︎ bravo
say $a.value; # ↪︎ A
say $b.value; # ↪︎ B
除了使用EVAL
和给定一个对应于其中一个枚举类型的Str
,我如何创建$c
以使其成为等同于charlie
的枚举值?
my $x = 'charlie';
my $c = ...
NATO{$x}
但是没有成功。感谢提供一个很好的替代答案(虽然比@ugexe的答案长,但在::($x)
无法清楚表达意思的情况下,Foo::{$x}
会让一切变得明朗易懂)。 - user0721090601::
会给出符号表,其中包含所有枚举项。这就是为什么NATO::{...}
可以工作的原因。 - moritz