Mio*_*nyr 6 perl inheritance overriding
我想在子类中替换父函数(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();
Run Code Online (Sandbox Code Playgroud)
当您调用 时Test2->Main(),包名称将作为第一个参数传递给被调用函数。您可以使用参数来寻址正确的函数。
sub Main
{
my ($class) = @_;
$class->SomeFunc() or die "Somefunc returned 0";
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,$class将是"Test2",因此您将调用Test2->SomeFunc()。更好的解决方案是使用实例(即,使用bless中的对象代替)。更好的是使用,它解决了 Perl 中面向对象编程的许多问题。Test::new$self$classMoose