如本期所示,某些标记名称与 Grammar 的类层次结构中的方法名称发生冲突(包括Match、Capture、Cool、Any和My .)。例如,`Mu.item
grammar g {
token TOP { <item> };
token item { 'defined' }
};
say g.parse('defined');
发出这样的错误:
Too many positionals passed; expected 1 argument but got 2
in regex item at xxx
item
也是Any
s 方法的一部分;我没有在其他类中找到任何其他名称通常失败的方法,但是没有定义任何子类(除了item
);大多数是多重或实际上定义为method
。
当像TWEAK
of之类的BUILD
子方法用于标记名称时也会发生这种情况,但这种情况下的错误是不同的:
Cannot find method 'match': no method cache and no .^find_method
at xxx
但是,其他子方法FALLBACK
完全没有问题:
grammar g {
token TOP { <FALLBACK> };
token FALLBACK { 'defined' }
};
say g.parse('defined') # OUTPUT: «「defined」 FALLBACK => 「defined」»
同样适用于 Grammar 类层次结构中的其他一些方法,例如,rand
或者一般来说,大多数方法都是这样定义的。
有问题的名称似乎有一个共同点,即它们被声明为sub
但并非总是如此:CREATE
最初导致整个问题的 . 被声明为method
. 因此,我完全不清楚要避免使用哪些名称,以及可以合法使用哪些名称。有人可以澄清吗?