2011-04-18 50 views
3

我是perl的新手,认真地发现很难使用它的面向对象的功能,因为我来自C++,python Background。 我想创建一个对象列表,但我不知道如何在perl中实现这一点。我从一个数组开始,但似乎没有工作。perl中的对象数组?

package X; 

sub new { 
    ..... 
} 


package Y; 

sub new { 
    ..... 

} 

package Z; 

my @object_arr = (X::new, Y::new); 

foreach $object (@object_arr) { 
    $object->xyz(); 
} 

这会抛出一个错误“无法调用方法”xyz“没有包或对象引用”。任何帮助表示赞赏。

回答

11

你的代码的搞掂版本,注释,就是:

package X; 

# You need to return a blessed object 
sub new { 
     my $self = bless {}, "X"; 
     return $self; 
} 

# You need to define xyz before calling it 
sub xyz { 
     print "X"; 
} 

package Y; 

sub new { 
     my $self = bless {}, "Y"; 
     return $self; 

} 


sub xyz { 
     print "Y"; 
} 

package Z; 

# You need to call the new method 
my @object_arr = (X->new(), Y->new()); 

# Don't forget to my when defining variables (including $object) 
foreach my $object (@object_arr) { 
    $object->xyz(); 
} 

您可能还需要调查Moose

+0

+1驼鹿。来自类似OO的背景,我只能说我不明白你为什么不'使用Moose'。 – wprl 2011-04-18 15:43:17

+7

只要您从类X或Y开始派生,就会中断。您应该说'my $ class = shift;我的$ self = bless {},$ class;'在构造函数中。 – Sean 2011-04-18 16:10:38