gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:43:42 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com