子类中的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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |