我在模块中有一个枚举定义AAA
:
enum RDProcDebug <None All AstBlock BlockType Scoping Templates MarkUp>;
class Debug {
method foo(RDProcDebug @ds) {
for @ds { say .key ~ ' => ' ~ .value }
}
}
在 Raku 程序中,这种方法很有效,例如
use AAA;
my RDProcDebug $rp .= new;
$r.foo(AstBlock, BlockType);
但是现在我需要从命令行提供调试元素的名称,它只能提供 Str,例如
$ RDOpts='AstBlock BlockType' raku myprog
# and in myprog
if %*ENV<RDOpts>:exists {
$rp.debug( %*ENV<RDOpts> ); # this does not work
}
那么如何将 Str 列表转换为枚举 RDProcDebug 类型的列表?
好的,所以你想从命令行传递这些枚举值,但你只能得到字符串。我明白了。以下是你可以做的事情:
首先,从您的环境中获取 RDOpts 并将其拆分成单独的单词。
现在到了最精彩的部分。Raku 有一个技巧,可以通过名称查找枚举值。它看起来有点奇怪,但它的工作原理如下:
这样做的目的是检查列表中的每个字符串是否有匹配的枚举值。如果一切顺利,您将得到一个实际的 RDProcDebug 值列表。您现在可以将其传递给您的调试方法:
总的来说,你会得到如下结果:
哦,对了,还有一件事:如果有人输入了错误的名字,你会得到一个错误。你可能想对此做些什么。