如何将参数传递给变量引用的令牌?
How to pass params to token referenced by variable?
我可以直接使用令牌名称轻松使用令牌签名:
my token t ( $x ) { $x };
'axb' ~~ / 'a' <t: 'x'> 'b' /; # match
'axb' ~~ / 'a' <t( 'x' )> 'b' /; # match
但是当令牌存储在变量中时,我还没有找到执行此操作的方法:
my $t = token ( $x ) { $x };
'axb' ~~ / 'a' <$t: 'x'> 'b' /;
'axb' ~~ / 'a' <$t( 'x' )> 'b' /;
两者都给出:
===SORRY!=== Error while compiling ...
Unable to parse expression in metachar:sym<assert>; couldn't find final '>'
执行此操作的神奇语法是什么?
顺便说一句:我什至浏览了 Raku 测试套件,它不包括 roast/S05-grammar/signatures.t
中的这种情况。
或者:
使用 jnthn 的回答中的解决方案让 Raku 明确知道您希望使用您的 $
印记标记变量作为 Callable
.
首先将变量明确声明为Callable
,并在调用中进行相应的更改:
my &t = token ( $x ) { $x };
say 'axb' ~~ / 'a' <&t: 'x'> 'b' /; # 「axb」
say 'axb' ~~ / 'a' <&t( 'x' )> 'b' /; # 「axb」
在变量前加一个&
:
my $t = token ( $x ) { $x };
say 'axb' ~~ / 'a' <&$t: 'x'> 'b' /;
say 'axb' ~~ / 'a' <&$t( 'x' )> 'b' /;
解析器查找 &
,然后委托给 Raku 变量解析规则,它将愉快地解析这样的上下文化器。
我可以直接使用令牌名称轻松使用令牌签名:
my token t ( $x ) { $x };
'axb' ~~ / 'a' <t: 'x'> 'b' /; # match
'axb' ~~ / 'a' <t( 'x' )> 'b' /; # match
但是当令牌存储在变量中时,我还没有找到执行此操作的方法:
my $t = token ( $x ) { $x };
'axb' ~~ / 'a' <$t: 'x'> 'b' /;
'axb' ~~ / 'a' <$t( 'x' )> 'b' /;
两者都给出:
===SORRY!=== Error while compiling ...
Unable to parse expression in metachar:sym<assert>; couldn't find final '>'
执行此操作的神奇语法是什么?
顺便说一句:我什至浏览了 Raku 测试套件,它不包括 roast/S05-grammar/signatures.t
中的这种情况。
或者:
使用 jnthn 的回答中的解决方案让 Raku 明确知道您希望使用您的
$
印记标记变量作为Callable
.首先将变量明确声明为
Callable
,并在调用中进行相应的更改:
my &t = token ( $x ) { $x };
say 'axb' ~~ / 'a' <&t: 'x'> 'b' /; # 「axb」
say 'axb' ~~ / 'a' <&t( 'x' )> 'b' /; # 「axb」
在变量前加一个&
:
my $t = token ( $x ) { $x };
say 'axb' ~~ / 'a' <&$t: 'x'> 'b' /;
say 'axb' ~~ / 'a' <&$t( 'x' )> 'b' /;
解析器查找 &
,然后委托给 Raku 变量解析规则,它将愉快地解析这样的上下文化器。