语法规则是类,因此它们应当受到与其他类相同的规则约束。然而,从语法规则中导出正则表达式时似乎存在问题:
grammar Word {
token TOP { ^ <letters> $}
regex letters is export { <[\w] - [_]>+ };
sub exported () is export { return 'exported' };
}
import Word;
say exported;
say "what_ever" ~~ &letters;
import
有效地导入了 exported
,并且不会对 letters
抱怨。然而,最后一行存在一个错误:
Type check failed in binding to parameter '<anon>'; expected Word but got Match (Match.new(orig => "what_ev...)
如果将
&letters
更改为/<letters>/
,这是调用正则表达式的另一种方式,将会发生相同的错误。该错误似乎指出在语法中声明letters
时存在一些隐藏参数,因为以下代码可行:module Regexes {
my regex letters is export { <[\w] - [_]>+ };
}
import Regexes;
say "what_ever" ~~ /<letters>/;
# Output:
# 「what」
# letters => 「what」
那么有效的参数是什么?我们如何有效地使用从语法
中导出的正则表达式/标记/规则?
has
中有记录。(对于该方面,正则表达式与方法相同。) 我不记得看到签名变化被记录过。它可能与正则表达式/令牌/规则是方法但又不同的方式有关。我已经更新了我的回答,但我仍在思考它,以后可能会返回更新它。 - raiphregex
不是method
(就像语法是类,但grammar
不是class
)。但是,这过于淡化了它们之间的差异,我认为。 - raiph