如何在Perl中覆盖子类1的父类函数?

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)

Luk*_*ský 4

当您调用 时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