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};