我可以gist
在say
内置函数上调用该方法:
&say.gist
sub say (| is raw) { #`(Sub|54790064) ... }
为什么我不能打电话gist
的while
?
&while.gist
===SORRY!=== Error while compilingUndeclared routine: while used at line 1
显然while
不是"常规"而是say
.但我认为Perl 6中的所有内置函数都是我们可以重新定义的函数.
我认为Perl 6中的所有内置函数都是我们可以重新定义的函数.
while
不是例程或宏,而是Perl6语法中定义的语法的一部分.
如果你想重新定义它,你将不得不创建自己的俚语,目前涉及黑魔法.
由于某种原因,我还没弄明白,它只在模块中完成时才有效(否则,%*LANG
似乎没有定义).
我们打电话给模块froop.pm6
:
use nqp; sub EXPORT { nqp::bindkey(%*LANG, 'MAIN', nqp::atkey(%*LANG, 'MAIN').^mixin(role { rule statement_control:sym{ [$ =froop{ $/.hash .^mixin: role { method Str { 'while' } } }|$ =until]<.kok> {} } })); once Map.new }
这将替换while
关键字(在语句位置)froop
,例如
use froop; my $i = 0; froop $i < 5 { say $i++ }