config
从a 的部分中提取哈希值如何最好RakuAST::Doc::Block
?这是程序:
use v6.d;
use experimental :rakuast;
my $ast = Q:to/CONF/.AST;
=for rakudoc :category("Language") :kind<sub> :subkind<operator>
Stuff
CONF
my $block = $ast.rakudoc[0];
my %config = $block.config.pairs.map( { .key => .value.DEPARSE } );
say %config.raku
Run Code Online (Sandbox Code Playgroud)
这是结果。
{:category("(\"Language\")"), :kind("<sub>"), :subkind("<operator>")}
Run Code Online (Sandbox Code Playgroud)
但.DEPARSE
正在生成引号,即("...")
和<...>
。我怎样才能提取字符串?
该.DEPARSE
方法尝试重新创建原始的 Raku 代码。对于字符串,这意味着包含引号。
如果您想获取实际值,您可以.literalize
在任何 RakuAST 对象上调用该方法。Nil
如果无法文字化,则返回;如果可以,则返回实际值。
更新:我上次做这件事已经有一段时间了。虽然上面的方法可行,但实际上已经有一种方法可以 DWIM .resolved-config
:。所以:
my %config := $block.resolved-config;
say %config;
Run Code Online (Sandbox Code Playgroud)
将产生:
Map.new((category => Language, foo => (a => 42 b => 666), kind => sub, subkind => operator))
Run Code Online (Sandbox Code Playgroud)
请注意使用:=
代替=
。虽然意志=
也可以工作,但意志:=
更加有效,因为它不需要复制任何东西。