在 Moose 中,如何为子类中的超类指定构造函数参数?

In Moose, how to specify constructor arguments for the superclass in a subclass?

我有一只 Moose class,它具有一些属性 (xyz)。我subclass它,对于subclass,x总是3。我如何在subclass中指定这个?

我以前和 Moo 一起工作过,但好像是一样的。您只需要在子类中使用 + 声明 属性 来覆盖之前的声明。

package Foo;
use Moose;
 
has 'a' => (
    is => 'rw',
    isa => 'Num',
);

has 'b' => (
    is => 'rw',
    isa => 'Num',
);

has 'c' => (
    is => 'rw',
    isa => 'Num',
);


package My::Foo;
use Moose;
 
extends 'Foo';
 
has '+a' => (
    default => 3,
);

可以使用 BUILDARGS.

around BUILDARGS => sub {
    my $orig  = shift;
    my $class = shift;
 
    return $class->$orig(@_, x => 3 );
};