gpt4 book ai didi

perl - Moose的属性与简单的子?

转载 作者:行者123 更新时间:2023-12-03 15:05:54 27 4
gpt4 key购买 nike

如何决定 - 下一个代码片段的推荐方式是什么?

我有一个基于 Moose 的模块,其中一些数据是简单的 HashRef .

可以写 - 作为 Mooseish HashRef , 像:

package Some;
has 'data' => (
isa => 'HashRef',
builder => '_build_href',
init_arg => undef,
lazy => 1,
);

sub _build-href {
my $href;
$href = { a=>'a', b=>'b'}; #some code what builds a href
return $href;
}

对比
sub  data {
my $href;
$href = { a=>'a', b=>'b'}; #some code what builds a href
return $href;
}

有什么不同?我问是因为打电话时:
my $obj = Some->new;
my $href = $obj->data;

在这两种情况下,我都会得到一个正确的 HashRef。所以什么时候推荐使用 Moose-ish has构造(更长)与简单的 data子?

PS:对于普通的 perl 程序员来说,这个问题可能很简单,但是请记住,我仍然只是在学习 perl。

最佳答案

如果你有一个属性,那么构造对象的任何人都可以在构造函数中设置 hashref:

my $obj = Some->new(data => { a => 'c', b => 'd' });

(尽管在您的示例中,您使用了 init_arg => undef 这将禁用该功能。)

此外,在属性的情况下,构建器仅运行 每个对象一次 而使用标准方法时,可能会多次调用该方法。如果构建 hashref 是“昂贵的”,那可能是一个重要的问题。

您会注意到的另一个区别是:
use Data::Dumper;
my $obj = Some->new;
$obj->data->{c} = 123;
print Dumper( $obj->data );

关于perl - Moose的属性与简单的子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20424929/

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