请考虑:
#!/usr/bin/perl
use strict;
use warnings;
package base
{
sub new()
{
my $class = shift( @_ );
my $self = {};
bless( $self, $class );
}
}
package myclass
{
our @ISA = 'base';
}
package main;
my $classname = 'myclass';
print( ( $classname->can( 'new' ) ) ? "can" : "cannot" );
print( "\n" );
print( @myclass::ISA );
我知道在一个文件中有多个包并不完全是“干净的Perl”。
我感兴趣的是最后几行。
my $classname = 'myclass';
print( ( $classname->can( 'new' ) ) ? "can" : "cannot" );
这里,我可以使用存储在classname
中的包的 name 来“检查”该包,而无需示例化包/类。
print( @myclass::ISA );
在这里,我“检查”了一个包的ISA
数组......但是直接命名了这个包。
是否也有方法引用包的ISA
到$classname
?
1条答案
按热度按时间2ic8powd1#
这是可能的没有严格的参:
或者你可以使用mro::get_linear_伊萨来获取所有的祖先(即@ISA的传递闭包):
但这并不是你通常需要的,在实践中,你想知道一个类是否继承自一个给定的类,这可以使用通用的
isa
方法来实现:同样,这将检查传递关系,而不仅仅是direct @伊萨成员关系。