arrays - 深度克隆 Moose 对象,其属性为 ArrayRef[Object] 和 Set::Object

标签 arrays perl clone moose

我有一个 Moose对象:

class My::Game {
  has 'players' => (isa => 'Set::Object', ...)
  has 'action_sequence' => (isa => 'ArrayRef[My::Game::Action]', ...)
}

现在我希望能够通过像 $game2 = $game->clone; 这样的调用来克隆这个对象,如何深度克隆它以便克隆 ArrayRef 中的对象?更棘手的是,Set::Object

我看过MooseX::Clone ,但我不清楚如何将其应用到本例中。示例代码将不胜感激。

谢谢!

最佳答案

我没有使用过这里的任何部分( MooseX::CloneMooseX::CompileSet::Object ),所以这里只是我对文档和常识的回顾中的粗略概述。 Moose架构:

  • MooseX::Clone 为您的对象提供一个clone() 方法,然后该方法将对具有“Clone”特征的每个属性调用clone()。
  • 所以,您需要为两个属性添加一个clone()方法...
  • 我雄心勃勃的希望 MooseX::Clone 能够处理 native attribute arrayrefs ,但由于它可能不会,您可以自己扩展该功能(即,如果 'action_sequence' 有选项 traits => ['Array'],那么克隆方法就足够聪明了实际上是通过 handles => { clone => [ 'map', 'clone' ] } 定义的——即通过在每个成员元素上调用clone()来克隆属性)——这里是可能是您提交第一个补丁的地方
  • Set::Object的文档建议您可以使用 Storable::dclone 可靠地克隆对象(您应该验证这一点,如果不正确,请鞭打作者和/或提供补丁)
  • 现在您需要向 Set::Object 属性添加一个 clone() 方法,文档建议您使用 MooseX::Compile 执行此操作。 (您应该访问 irc.perl.org #moose,向我们详细介绍您的进展,以便我们稍后制作一部有关它的纪录片):)

关于arrays - 深度克隆 Moose 对象,其属性为 ArrayRef[Object] 和 Set::Object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3536752/

相关文章:

用于将数组内容复制到指针的 C++ 库

java - 如何从 ND4j 中的 NDArray 中选择一组给定的索引,类似于 numpy 的 arraydata[arrayIndex]?

c++ - C++ 中用户定义大小的数组

java - Perl 和 Java 中的 Base64 编码字符串不同

perl - 使用 -T 开关运行时 $ENV{ENV} 不安全

arrays - 如何将数组切片绑定(bind)到原始数​​组,以便对一个数组进行的所有更改都对两者进行?

Jquery 克隆输入并删除克隆输入中的值

javascript - Object.keys、切片和拼接

php - 克隆行为 - 无法为克隆设置属性值?

c# - 是否可以在不强制转换的情况下在 C# 中实现 "virtual constructor"模式?