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

Perl 6是否应该能够解释来自不同来源的相同角色的包含?

如何解决《Perl6是否应该能够解释来自不同来源的相同角色的包含?》经验,为你挑选了0个好方法。

想象一下表示为角色的一系列复杂语法,尽管这个简单的例子足以显示冲突:

role Alpha {
    token alpha { :i <[A..Z]> }
    }

role Digit {
    token digit { <[0..9]> }
    }

role Either
    does Alpha
    does Digit {
    token either {  |  }
    }

grammar Thingy
    does Either
    does Alpha
    {
    token TOP {  * }
    }

my $match = Thingy.parse( '1a3' );
dd $match;

这不起作用,因为Perl 6没有解开关系,以确定冲突实际上是来自同一来源的相同内容:

方法'alpha'必须由Thingy类解析,因为它存在于多个角色中

但是,阅读S14,我看到:

角色可能不会从类继承,但可能由其他角色组成.然而,直到课堂构成时间才评估这种"裙带"组合物.这意味着如果两个角色带来了同一个朋友,那就没有冲突 - 就好像这个类本身就引入了裙带角色而各自的角色没有.无论其结合方式如何,角色都不会与自身发生冲突.

我读到这意味着角色尽可能晚地应用,因此该课程Thingy将能够解开Alpha包含在两个不同部分中的角色.我认为这可以像创建构成最终类的所有角色的列表,然后将该列表仅应用于最终类.这样,类似的东西Either只会混合它定义的东西,并依赖于后来的构图引入Alpha.

当我尝试为各种(IETF)RFC实现语法时,我碰到了这个问题.其中许多引用了其他RFC的语法,这使得Perl 6无法通过C3解析继承.所以,我认为角色会断开关系.显然它没有.

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