这可能使用 Perl:
my @array = ($class1,$class2,$class3);
foreach my $c (@array)
{
my $temp = $c->new();
$temp->run($var1,$var2);
}
这背后的想法是数组将始终包含不同的类名。然后我想创建该类的一个对象并从中运行一个方法。每个类都有些相似,但在 run 方法中包含自己的逻辑?
如果这是不可能的,有没有其他方法可以做到这一点?这是糟糕的编程吗?
这可能使用 Perl:
my @array = ($class1,$class2,$class3);
foreach my $c (@array)
{
my $temp = $c->new();
$temp->run($var1,$var2);
}
这背后的想法是数组将始终包含不同的类名。然后我想创建该类的一个对象并从中运行一个方法。每个类都有些相似,但在 run 方法中包含自己的逻辑?
如果这是不可能的,有没有其他方法可以做到这一点?这是糟糕的编程吗?
您需要确保 run-Method 始终可以访问:
my @array = ($class1,$class2,$class3);
foreach my $class (@array) {
my $temp = $class->new();
if ($temp->can('run') {
$temp->run($var1,$var2);
} else {
...
}
}
perl 中的类是bless
语句。你用一个类的名字祝福一个参考,哇!,就是那个类。没什么特别的。
当然,您最终可能会得到一个没有方法的类,这可能有点问题。但是,我对子类共享一个公共父类的子类执行此操作,但类的类型会改变类的行为:
Package Main_class;
use Carp;
sub new {
my $class = shift; #We'll ignore this one
my $subclass = shift; #This is my actual class
my $self = {};
my $class .= "::$subclass";
bless $self, $class; #Now, it's my class!
if ( not $self->isa($class) ) {
croak qw(Subclass "$subclass" is an invalid subclass);
}
return $self;
}
在我的程序中,我会这样做:
my $object = Main_class->new($subclass);
而且,如果我不想让我的程序死掉……
my $object;
eval {
$object = Main_class->new($subclass);
}
if ( $@ ) {
Here be dragons.... #What do you do if that object creation failed...
}
这是我执行此操作的程序示例。
在这里,我正在阅读问题及其类型的文件。我读了宏名称,以及它的问题类型。然后我使用我的父类来创建对象,但我用正确的子类祝福它。重要的是使用isa
所有类都可用的通用方法。我测试我创建的对象是否实际上是我的类的子类。
以前的答案涵盖了您正在寻找的内容,但如果您不想在执行此类操作时显式地使用()/需要()每个类的包,我可能会添加 Module::Runtime 会很有帮助:
use Module::Runtime;
for my $cls (@classes) {
my $obj = use_module($cls)->new;
...
}
use strict;
use warnings;
use class1;
use class2;
use class3;
my @array = qw(class1 class2 class3);
foreach my $c (@array)
{
my ($var1, $var2) = (12,34);
my $temp = eval { $c->new };
$temp->run($var1,$var2);
}
未经测试,但这是您应该调查的事情。您确实需要“使用”您正在使用的任何课程,并始终使用严格来节省自己的时间未来的问题