当前位置:  开发笔记 > 编程语言 > 正文

为什么我不能在"while"上称之为"gist"?(Perl 6)

如何解决《为什么我不能在"while"上称之为"gist"?(Perl6)》经验,为你挑选了1个好方法。

我可以gistsay内置函数上调用该方法:

&say.gist
sub say (| is raw) { #`(Sub|54790064) ... }

为什么我不能打电话gistwhile

&while.gist
===SORRY!=== Error while compiling 
Undeclared routine:
    while used at line 1

显然while不是"常规"而是say.但我认为Perl 6中的所有内置函数都是我们可以重新定义的函数.



1> Christoph..:

我认为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++ }

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有