从名称而不是值创建枚举

时间:2019-04-20 02:09:11

标签: enums perl6

给出枚举

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 =  ...

2 个答案:

答案 0 :(得分:11)

您可以将其视为哈希:

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

答案 1 :(得分:7)

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

enum NATO (:alpha<A>, :bravo<B>, :charlie<C>);
my $x = 'charlie';
my $c = ::($x);
say $c.value;