gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:15:56 26 4
gpt4 key购买 nike

我发现如果子类添加触发器,则基类中的方法修饰符不会运行。这看起来像是 Moose 的 bug,或者至少不直观。这是我的例子:

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”警告,而忽略“before”修饰符。我将 Perl 5.14.2 与 Moose 2.0402 一起使用。

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

最佳答案

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

添加到属性会删除方法修饰符似乎是一个普遍问题。此代码在不涉及触发器的情况下演示了您的错误。

package Foo {
use Moose;

has 'foo' => (
is => 'rw',
isa => 'Str',
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 .

关于子类中的 perl moose 触发器破坏方法修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12363971/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com