加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 如何声明一个类在MooseX :: Declare中使用多个角色?

发布时间:2020-12-15 21:43:48 所属栏目:大数据 来源:网络整理
导读:鉴于角色Fooable和Barable都已定义,我怎么说FooBar类可以做Fooable和Barable?我没问题 #!/usr/bin/perluse MooseX::Declare;role Fooable { method foo { print "foon" }}role Barable { method bar { print "barn" }}class Foo with Fooable {}class Bar
鉴于角色Fooable和Barable都已定义,我怎么说FooBar类可以做Fooable和Barable?我没问题
#!/usr/bin/perl

use MooseX::Declare;

role Fooable {
    method foo { print "foon" }
}

role Barable {
    method bar { print "barn" }
}

class Foo with Fooable {}
class Bar with Barable {}

package main;

use strict;
use warnings;

Foo->new->foo;
Bar->new->bar;

但是当我尝试添加时

class FooBar with Fooable,Barable {}

我得到的不是有用的错误

expected option name at [path to MooseX/Declare/Syntax/NamespaceHandling.pm] line 45

为了向自己证明我并不疯狂,我用Moose重写了它.这段代码有效(但比罪恶更丑):

#!/usr/bin/perl

package Fooable;
    use Moose::Role;    
    sub foo { print "foon" }

package Barable;    
    use Moose::Role;    
    sub bar { print "barn" }

package Foo;    
    use Moose;    
    with "Fooable";

package Bar;    
    use Moose;    
    with "Barable";

package FooBar;    
    use Moose;    
    with "Fooable","Barable";

package main;

use strict;
use warnings;

Foo->new->foo;
Bar->new->bar;
FooBar->new->foo;
FooBar->new->bar;

解决方法

显然你需要括号:
#!/usr/bin/perl

use MooseX::Declare;

role Fooable {
    method foo { print "foon" }
}

role Barable {
    method bar { print "barn" }
}

class Foo with Fooable {}
class Bar with Barable {}
class FooBar with (Fooable,Barable) {}

package main;

use strict;
use warnings;

Foo->new->foo;
Bar->new->bar;
FooBar->new->foo;
FooBar->new->bar;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读