Префикс объявления регулярного выражения letters
с my
или our
.
По умолчанию декларатор method
, regex
, token
или rule
объявляется с помощьюнеявный has
декларатор, предшествующий ему.
Я все еще размышляю о том, что здесь происходит, но хотел бы обновить свой ответ в ответ на ваш первый комментарий.
Type check failed in binding to parameter '';
expected Word but got Match (Match.new(orig => "what_ev...)
Бит parameter ''
определенно меньше, чем удивительный.
Любопытно, что подпись подпрограмм, объявленных с my method
или our method
, имеет класс или грамматику включениякак их тип, с предположением Mu
, если они объявлены в основной строке, тогда как для regex
, token
или rule
инвокант всегда равен Mu
:
grammar g {
method method { ... } # (g $: *%_)
has method has-method { ... } # (g $: *%_)
my method my-method is export { ... } # (g $: *%_)
regex regex { ... } # (g $: *%_)
has regex has-regex { ... } # (g $: *%_)
my regex my-regex is export { ... } # (Mu $: *%_)
sub sub is export { ... } # ()
# has sub has-sub is export { ... } # Cannot use 'has' with sub declaration
my sub my-sub is export { ... } # ()
}
import g;
say .signature
for g.^lookup('method'),
g.^lookup('has-method'),
&my-method,
g.^lookup('regex'),
g.^lookup('has-regex'),
&my-regex,
&sub,
&my-sub
отображает подпись для каждого стандартного объявления в грамматике.Я добавил вывод в виде комментариев в конце каждой процедуры.