gpt4 book ai didi

perl - 基类中的 Moose 方法修饰符不会被调用

转载 作者:行者123 更新时间:2023-12-02 02:10:04 36 4
gpt4 key购买 nike

很酷的是,可以将它们添加到子类中或将它们混合到角色中。我的问题是,当子类重新定义方法本身(而不是修饰符)时,基类的方法修饰符似乎被停用了。也许我理解错误的方法修饰符。示例:

use feature 'say';

package Foo;
use Moose;

has called => (is => 'rw', isa => 'Bool', default => 0);
sub call { 'Foo called' }
after call => sub { shift->called(1) };

my $foo = Foo->new();
say $foo->called; # 0
say $foo->call; # Foo called
say $foo->called; # 1

package Bar;
use Moose;
extends 'Foo';

sub call { 'Bar called' }

my $bar = Bar->new();
say $bar->called; # 0
say $bar->call; # Bar called
say $bar->called; # 0

我希望最后的输出是 1,就像 $foo 一样。我做错了什么?

最佳答案

这是怎么回事

  • 你定义一个 Foo::call
  • 你在之后修改它
  • 你定义了一个不调用 Foo::Call 的 Bar::call

修饰符不是神奇的运行时事物,而是类定义时间事物。要执行您在此处尝试执行的操作,您必须以不同的方式构建代码

关于perl - 基类中的 Moose 方法修饰符不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13314257/

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