我想替换子类中的父函数(Somefunc),所以当我调用Main过程时,它应该失败。
Perl中可能吗?
代码:
package Test;
use strict;
use warnings;
sub Main()
{
SomeFunc() or die "Somefunc returned 0";
}
sub SomeFunc()
{
return 1;
}
package Test2;
use strict;
use warnings;
our @ISA = ("Test");
sub SomeFunc()
{
return 0;
}
package main;
Test2->Main();
最佳答案
当您调用Test2->Main()
时,包名称将作为第一个参数传递给被调用的函数。您可以使用该参数来解决正确的功能。
sub Main
{
my ($class) = @_;
$class->SomeFunc() or die "Somefunc returned 0";
}
在此示例中,
$class
将为"Test2"
,因此您将调用Test2->SomeFunc()
。更好的解决方案是使用实例(即bless
将该对象存储在Test::new
中,使用$self
而不是$class
)。甚至更好的方法是使用 Moose
,它解决了Perl中面向对象编程的许多问题。