gpt4 book ai didi

perl - 从另一个 Moose 对象实例化 Moose 对象的正确方法?

转载 作者:行者123 更新时间:2023-12-04 12:14:26 26 4
gpt4 key购买 nike

从另一个 Moose 对象创建实例的正确方法是什么?在实践中,我已经看到这是通过多种方式完成的:

$obj->meta->name->new()
$obj->new() ## which has been deprecated and undeprecated
(blessed $obj)->new()
-- and, its bastard variant: (ref $obj)->new()
$obj->meta->new_object()

然后,如果您有 traits 怎么办? ?有没有一种透明的方式来支持它?使用 anonymous classes 完成其中任何一项工作?

最佳答案

您的选择,$obj->meta->name->new()(blessed $obj)->new()两者都是最安全的。

实现traits 的方式是,创建一个匿名子类并将角色应用到该子类并将实例重新加入该子类。这意味着这些解决方案中的任何一个都可以很好地处理特征。 Perl 缺乏真正的匿名子类(每个包都必须有命名空间),Moose 通过在匿名类的通用命名空间中创建名称来解决这个问题。

如果您花一点时间尝试一些示例代码,您就会看到它的实际效果。

  $perl -Moose -E'with q[MooseX::Traits];
package Role; use Moose::Role;
package main; say Class->with_traits(q[Role])->new->meta->name'

MooseX::Traits::__ANON__::SERIAL::1

希望有帮助。

关于perl - 从另一个 Moose 对象实例化 Moose 对象的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3250839/

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