Tôi có một tình huống mà tôi cần phải tìm ra người gọi của một gói và mã của tôi trông giống như sau:Perl Inheritance - Ai là người gọi của tầng lớp phụ huynh
Inherited.pm:
package Inherited;
our @ISA = qw(BaseClass);
sub new {
SUPER::new();
}
BaseClass .pm
package BaseClass;
sub new {
$a = caller(0);
print $a
}
Bây giờ tôi có một lớp (MyClass.pm) mà hiện:
MyClass.pm:
$obj = Inherited->new();
Bản in này được kế thừa. Nhưng tôi cần MyClass để làm bản in.
Ai đó có thể giúp tôi giải quyết vấn đề này không?
Tôi không hiểu tại sao bạn mong đợi điều này. 'Inherited' là người gọi. Bạn có thể kiểm tra trong 'new()' của 'Inherited' và sau đó chuyển thông tin đó vào. – Cfreak
@Cfreak: cảm ơn bạn đã phản hồi. Ya tôi chấp nhận rằng đi qua đối số là một giải pháp, nhưng có cách nào khác để tìm người gọi của lớp cha mẹ. Trong kịch bản thực tế của tôi, tôi cần loại chức năng này mà không cần truyền tham số. – sundar
Bạn có thể sử dụng khả năng stack-trace của 'Carp' để tìm kiếm toàn bộ danh sách người gọi ('Carp :: longmess()') nhưng nó không phải là một giải pháp tuyệt vời. Xem qua các mô-đun 'Class :: *' trên CPAN. Có thể có một giải pháp thanh lịch hơn ở đó. – Cfreak