perl – Moose的属性vs simple sub?
发布时间:2020-12-16 06:26:21 所属栏目:大数据 来源:网络整理
导读:如何决定 – 下一个代码片段的推荐方法是什么? 我有一个基于Moose的模块,其中一些数据是一个简单的HashRef. 可以编写 – 作为Mooseish HashRef,如: package Some;has 'data' = ( isa = 'HashRef',builder = '_build_href',init_arg = undef,lazy = 1,);sub
如何决定 – 下一个代码片段的推荐方法是什么?
我有一个基于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; } VS 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构造(更长)与简单的数据子? 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 ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |