Perl   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了语法 – Perl 6是否应该能够解释来自不同来源的相同角色的包含?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
想象一下代表角色的一系列复杂语法,尽管这个简单的例子足以显示冲突:
role Alpha {
    token alpha { :i <[A..Z]> }
    }

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

role Either
    does Alpha
    does Digit {
    token either { <alpha> | <digit> }
    }

grAMMar Thingy
    does Either
    does Alpha
    {
    token TOP { <alpha> <either>* }
    }

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

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

但是,阅读S14,我看到:

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

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

解决方法

是的,Perl 6应该能够解开来自不同来源的相同角色的包含.

role的简单definition是:

要么

因此,假设我们对可以在水上浮动的对象具有Floatable行为,并且对于可以航行的对象具有Sailable行为.当然,可以航行的物体可以漂浮. Sloop天然可浮动且可以播放. Floatable和Sailable角色都传达了相同的Floatable行为,这一事实没有冲突.

在Perl中,这可以按预期工作(它也适用于MoosE)

#!/usr/bin/env perl

use v5.24; # why not
use warnings;

package Floatable {
    use Moo::role;
    sub float { say "float" }
}

package Sailable {
    use Moo::role;
    with 'Floatable';
    sub sail { $_[0]->float; say "sail" };
}

package Sloop {
    use Moo;
    with qw( Floatable Sailable );
}

my $s = Sloop->new;

$s->sail;

这种行为是直观明显的行为.

在查看Perl6 documentation for roles时我注意到的一个问题是缺少简单的一句话定义:

显然,当perl6遇到两个提供完全相同行为的角色时,它会认为这是一种我认为不合理的冲突.

请注意以下示例中的细微区别:

#!/usr/bin/env perl

use v5.24; # why not
use warnings;

package Floatable {
    use Moo::role;
    sub float { say "float" }
}

package Sailable {
    use Moo::role;
    sub float { say "floaTing bonds to finance journey "}
    sub sail { $_[0]->float; say "sail" };
}

package Sloop {
    use Moo;
    with qw( Floatable Sailable );
}

my $s = Sloop->new;

$s->sail;

在这种情况下,可能会发生冲突,因为两个不同的角色想声称提供相同的行为.

大佬总结

以上是大佬教程为你收集整理的语法 – Perl 6是否应该能够解释来自不同来源的相同角色的包含?全部内容,希望文章能够帮你解决语法 – Perl 6是否应该能够解释来自不同来源的相同角色的包含?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。