我可以通过直接使用令牌名称轻松使用令牌签名:
my token t ( $x ) { $x };
'axb' ~~ / 'a' <t: 'x'> 'b' /; # match
'axb' ~~ / 'a' <t( 'x' )> 'b' /; # match
Run Code Online (Sandbox Code Playgroud)
但是,当令牌存储在变量中时,我还没有找到一种方法来做到这一点:
my $t = token ( $x ) { $x };
'axb' ~~ / 'a' <$t: 'x'> 'b' /;
'axb' ~~ / 'a' <$t( 'x' )> 'b' /;
Run Code Online (Sandbox Code Playgroud)
两者都给出:
===SORRY!=== Error while compiling ...
Unable to parse expression in metachar:sym<assert>; couldn't find final '>'
Run Code Online (Sandbox Code Playgroud)
这样做的神奇语法是什么?
顺便说一句:我什至浏览过 Raku 测试套件,它在roast/S05-grammar/signatures.t.
Jon*_*ton 11
&在变量前放置一个:
my $t = token ( $x ) { $x };
say 'axb' ~~ / 'a' <&$t: 'x'> 'b' /;
say 'axb' ~~ / 'a' <&$t( 'x' )> 'b' /;
Run Code Online (Sandbox Code Playgroud)
解析器查找&, 然后委托给 Raku 变量解析规则,它会很高兴地解析这样的上下文化器。
任何一个:
使用 jnthn 的答案中的解决方案让 Raku 明确知道您希望使用$带有 sigil 的标记变量作为Callable.
Callable首先明确声明变量并在调用中进行相应的更改:
my &t = token ( $x ) { $x };
say 'axb' ~~ / 'a' <&t: 'x'> 'b' /; # ?axb?
say 'axb' ~~ / 'a' <&t( 'x' )> 'b' /; # ?axb?
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |