我是 Perl 中 Moose 的新手,当我遇到这个我不太理解的文档时,我一直在阅读它的文档:
如果您想使用任何类型的引用作为默认值,您必须从子例程中返回它。好的,我得到了这个声明,下一个例子
has 'mapping' => (
is => 'ro',
default => sub { {} },
);
这是必要的,因为否则 Perl 将只实例化引用一次,并且它将被所有对象共享:这个我不明白,它会只实例化引用一次并被所有对象共享是什么意思?如何?
has 'mapping' => (
is => 'ro',
default => {}, # wrong!
);
如果您将裸露的非子程序引用作为默认值传递,Moose 将引发错误。
如果 Moose 允许这样做,那么默认映射属性很容易在许多对象之间共享。相反,将它包装在我们上面看到的子例程引用中。不要再得到这个