使用Perl/Moose,修饰符返回的值会发生什么变化?
学习perl我最近发现了驼鹿的神奇之处 我试着用修饰符——或者至少是返回值是如何处理的。。。它们被存放在什么地方了吗使用Perl/Moose,修饰符返回的值会发生什么变化?,perl,return-value,moose,modifier,Perl,Return Value,Moose,Modifier,学习perl我最近发现了驼鹿的神奇之处 我试着用修饰符——或者至少是返回值是如何处理的。。。它们被存放在什么地方了吗 {package Util::Printable; use Moose::Role; requires 'to_str','init'; before 'to_str' => sub { my($self) = @_; $self->{to_string} = "my string thing"; return $se
{package Util::Printable;
use Moose::Role;
requires 'to_str','init';
before 'to_str' => sub {
my($self) = @_;
$self->{to_string} = "my string thing";
return $self->{to_string};
};
after 'init' => sub{
my($self) = @_;
$self->{roles} = __PACKAGE__;
$self->{is_printable} = 1;
};
}
1;
__END__
使用可打印角色
{package MonkeyPrint;
use Moose;
with 'Util::Printable';
sub init{
my($self) = @_;
return 1;
};
sub BUILD{
my($self) = @_;
$self->init();
}
# ------------------------------------------------------------------------ #
# Printable Support
# ------------------------------------------------------------------------ #
use overload '""' => 'to_str';
sub to_str {
my($self) = @_;
$self->{to_string} = __PACKAGE__;
return $self->{to_string};
};
__PACKAGE__->meta->make_immutable;
}
1;
__END__
假设一个方法在之前有一个
,在
之后有一个
调用
代码之前的
其返回值被忽略/丢弃
调用原始方法
它的价值被保存
调用
代码之后的
其返回值被忽略/丢弃
将返回保存的值
如果需要更改或替换原始方法返回的值,请使用around
。示意性说明:您的包
块周围不需要大括号package
意味着“之后的一切都将在这样的包中。”因为通常每个文件只使用一个包,所以不会出现二元性。注意,从5.14开始,您还可以使用package Util::Printable{contents}
语法,该语法更符合其他名称空间的花括号语言。新的语法是否会取代目前的惯例尚待观察。