最初的主题是从这里开始的,但我需要一个工作代码示例,如何使用 Moo 或 Moose 正确委派属性。
根据文档,我编写了这段代码来检查:
package Cat;
use Moo;
has 'token' => ( is => 'rw', default => '12345' );
has 'tiger' => ( is => 'rw', default => sub { my $self = shift; Cat::Tiger->new(token => $self->token) }, handles => [ qw(token) ] );
package Cat::Tiger;
use Moo;
extends 'Cat';
# + some additional methods
package main;
use Data::Dumper;
my $cat = Cat->new(token=>'54321');
warn $cat->token;
warn $cat->tiger->token;
但是这段代码会产生错误:
您不能在 3.pl 第 5 行使用委托覆盖本地定义的方法(令牌)
如果我handles => [ qw(token) ]
在第 5 行删除代码将返回另一个错误:
在 3.pl 第 5 行对子例程“Tiger::new”进行深度递归。
那么怎么办呢?
我需要将对象 () 的标记设置为与对象Cat::Tiger
( $cat->tiger->token
) 中相同的标记,并在每次对象标记更改时同步它们。Cat
$cat-token
Cat