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

子类中的perl moose触发器会破坏方法修饰符

发布时间:2020-12-15 21:45:34 所属栏目:大数据 来源:网络整理
导读:我发现如果子类添加了一个触发器,那么基类中的方法修饰符就不会运行.这看起来像是一个驼鹿虫,或者至少是不直观的.这是我的例子: package Foo { use Moose; has 'foo' = ( is = 'rw',isa = 'Str',); before 'foo' = sub { warn "before foo"; };};package Fo
我发现如果子类添加了一个触发器,那么基类中的方法修饰符就不会运行.这看起来像是一个驼鹿虫,或者至少是不直观的.这是我的例子:
package Foo {
    use Moose;

    has 'foo' => (
        is  => 'rw',isa => 'Str',);

    before 'foo' => sub {
        warn "before foo";
    };
};

package FooChild {

    use Moose;
    extends 'Foo';

    has '+foo' => ( trigger => &;my_trigger,);

    sub my_trigger {
        warn 'this is my_trigger';
    }
};

my $fc = FooChild->new();
$fc->foo(10);

如果运行此示例,则仅运行“this is my_trigger”warn,并忽略“before”修饰符.我正在使用Perl 5.14.2和Moose 2.0402.

这是正确的行为吗?这似乎不对,特别是因为触发器将在触发器直接在基类中定义之前触发.

解决方法

根据您不应该在类中区分继承的代码和代码的原则,我将其称为错误.

似乎是添加到属性删除方法修饰符的一般问题.此代码演示了您的错误,不涉及触发器.

package Foo {
    use Moose;

    has 'foo' => (
        is  => 'rw',default => 5,);

    before 'foo' => sub {
        warn "before foo";
    };
};

package FooChild {

    use Moose;
    extends 'Foo';

    has '+foo' => ( default => 99 );
};

my $fc = FooChild->new();
print $fc->foo;

Please report this to the Moose folks.

(编辑:李大同)

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

    推荐文章
      热点阅读