Moose ArrayRef属性作为Array返回

mpe*_*ers 8 oop perl moose

我有一个Moose类,其属性是一个ArrayRef(只读),并由对象内部操作.但是当有人调用访问器方法时,我希望它返回一个数组(或列表)而不是引用.这不仅会减少类的用户必须执行的解除引用量,而且还意味着它们不会意外地篡改我的对象使用的相同引用.

那么最好的方法是什么?某种强制?

hdp*_*hdp 17

使用Moose :: Meta :: Attribute :: Native :: Trait :: Array和delegation,例如

handles => { my_array => 'elements' }
Run Code Online (Sandbox Code Playgroud)

(通过#moose上的doy)

auto_deref 如果在标量上下文中调用访问器,则具有仍然返回引用的不良行为.

  • `auto_deref`(在Moose git中)的文档现在让它更清晰. (2认同)

Ada*_*ire 6

虽然你可以使用auto-deref,但是Moose :: Manual :: BestPractices说这不是最好的方法,你应该考虑使用Moose :: Meta :: Attribute :: Native来实现这个功能.