驼鹿对象作为懒惰哈希

时间:2015-11-09 14:57:42

标签: perl lazy-evaluation moose

出于性能原因,我想用懒惰的Moose对象替换我的程序中使用的一些哈希值。问题是,有很多我无法控制的代码当然使用->{key}来访问元素。这种访问与Moose对象一起使用,但在初始化之前不能与懒惰对象一起使用:

package Stuff;

use Moose;

has foo => (
   lazy=>1, 
   default=> sub { +{bar=>baz} }
);

package main;
my $x = Stuff->new();

print Dumper $x->{foo}; # undef =(
print Dumper $x->foo;   # {bar => baz }
print Dumper $x->{foo}; # {bar => baz }

是否可以首先使$x->{foo}初始化变量?

2 个答案:

答案 0 :(得分:1)

您不能直接将其用作哈希,但使用Tie::Moose,您可以创建一个调用底层Moose方法的哈希。您可以将此哈希传递给其他代码。

use Tie::Moose;

my $x = Stuff->new();
tie my %x, "Tie::Moose", $x;

print Dumper($x{foo}); # { 'bar' => 'baz' }

答案 1 :(得分:0)

因此,只要访问哈希对象的元素,您就希望代码运行?这可以使用magic,但会大大减慢对对象的访问速度。