如何规范地解析模块名称
Posted
技术标签:
【中文标题】如何规范地解析模块名称【英文标题】:How to parse a Module name canonically 【发布时间】:2020-11-13 05:20:26 【问题描述】:我有一个正则表达式,它解析一个字符串,该字符串应该是 Raku 的完全限定模块名称(见下文)。由于 Precomp 模块中似乎只使用了 auth、ver 和 api 版本,因此我只对其进行测试。
我需要将模块名称与标识符分开。
我的正则表达式是:
my $rx := /
^
$<name> = ( [ \w | '::' ] + )
[ ':' $<part> = ( [ 'ver' | 'auth' | 'api' ] )
\< ~ \> $<val> = ( .*? ) ]*
$
/;
问题是是否有一个标准的方式来匹配一个 Raku 模块,或者一个 sub,这样这个正则表达式就不会在未来成为一个错误。
【问题讨论】:
【参考方案1】:如果你使用 Zef::Identity 可能是最好的
use Zef::Identity;
say Zef::Identity.new( "WithApi:ver<0.0.2>:api<1>" ).hash;
# api => 1, auth => , from => Perl6, name => WithApi, ver => 0.0.2
它可能已经安装在您的系统中,因为它是
zef
【讨论】:
【参考方案2】:查看grammar of Raku,看起来它只是首先在包定义中吃所有副词,然后检查每个副词是ver
、auth
还是api
, 到 die
如果不是其中之一。
所以,我会说:不,目前没有标准方法来匹配 Raku 模块名称。
【讨论】:
以上是关于如何规范地解析模块名称的主要内容,如果未能解决你的问题,请参考以下文章