我想替换子类中的父函数(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 中面向对象编程的很多问题。
关于perl - 如何在 Perl 中用子类覆盖父类函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2305386/