Perl/OOP:如何在“类A”的构造函数中创建“类B”的对象

Perl/OOP:如何在“类A”的构造函数中创建“类B”的对象,perl,oop,object,object-composition,Perl,Oop,Object,Object Composition,我有以下构造函数的A类: sub new { my ($class, %args) = @_; return bless(\%args, $class); } 我还有另一个类,LWP::UserAgent,我想在我的类A中使用它。 我可以这样做来解决问题: ua = LWP::UserAgent->new; sub new { my ($class, %args) = @_; return bless(\%args, $class); } 但在本例

我有以下构造函数的A类:

sub new {
    my ($class, %args) = @_;

    return bless(\%args, $class);
}
我还有另一个类,LWP::UserAgent,我想在我的类A中使用它。 我可以这样做来解决问题:

ua = LWP::UserAgent->new;

sub new {
    my ($class, %args) = @_;

    return bless(\%args, $class);
}

但在本例中,我将有一个UserAgent对象,但我希望类a的每个实例都有一个唯一的对象。

然后您需要将该对象构造为属性

use LWP::UserAgent;

sub new {
    my ($class, %args) = @_;

    return bless { %args, lwp => LWP::UserAgent->new }, $class;
}
现在,类A的每个对象都将具有lwp属性—它自己的lwp::UserAgent对象


当然,我希望在现实中,通过所有必要的错误检查可以很好地写出这一点。

然后您需要将该对象构造为属性

use LWP::UserAgent;

sub new {
    my ($class, %args) = @_;

    return bless { %args, lwp => LWP::UserAgent->new }, $class;
}
现在,类A的每个对象都将具有lwp属性—它自己的lwp::UserAgent对象


我当然希望在现实中,这是写得很好的所有必要的错误检查。

你能告诉我如下:{%args,lwp=>lwp::UserAGent->new}与下面的代码相同吗$args{lwp}=lwp::UserAgent->new;返回bless\%args,$class@Nazar是的,而且使用\%args比使用{%args}复制\%args更有效。但是,这在每个对象的生命周期中都会执行一次。这段代码究竟创建了多少个对象?我会写得很好-我想你真的必须,为了检查用户输入的%args。我想我不会创建超过2-3个对象。但为了灵活起见,我决定将这个逻辑从类转移到实例。我使用Params::ValidationCompiler验证用户*输入,但不验证lwp对象。因为lwp对象是内部的,我不希望用户在构造函数步骤中修改它。@Nazar啊,好吧,你们甚至有正确的方法!确认到位。我不知道这个模块,但我可以期待它是好的。是的,再次感谢你的帮助!你能告诉我以下内容吗:{%args,lwp=>lwp::UserAGent->new}与下面的代码相同吗$args{lwp}=lwp::UserAgent->new;返回bless\%args,$class@Nazar是的,而且使用\%args比使用{%args}复制\%args更有效。但是,这在每个对象的生命周期中都会执行一次。这段代码究竟创建了多少个对象?我会写得很好-我想你真的必须,为了检查用户输入的%args。我想我不会创建超过2-3个对象。但为了灵活起见,我决定将这个逻辑从类转移到实例。我使用Params::ValidationCompiler验证用户*输入,但不验证lwp对象。因为lwp对象是内部的,我不希望用户在构造函数步骤中修改它。@Nazar啊,好吧,你们甚至有正确的方法!确认到位。我不知道这个模块,但我可以期待它是好的。是的,再次感谢你的帮助!