2011-04-18 3 views
3

나는 perl을 처음 접했고 C++, 파이썬 배경에서와 같이 객체 지향 기능을 사용하기가 어렵다는 점을 심각하게 깨닫고있다. 개체 목록을 만들고 싶었지만 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

일을 조사 할 수 있습니다. 비슷한 OO 배경에서 왔을 때, 내가 말할 수있는 것은 내가 왜 당신이 '무스 사용'을하지 않을지 모르겠다는 것입니다. – wprl

+7

X 또는 Y 클래스에서 파생되기 시작하면 바로 깨질 것입니다.'my $ class = shift; my $ self = bless {}, $ class;는 생성자에 있습니다. – Sean