perl - 如何在 Perl 中用子类覆盖父类函数?

标签 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();

最佳答案

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

相关文章:

c++ - 基类和派生类中的相同数据成员

java - 访问子类中覆盖的值

perl - 如何设置一个可以被同一基类(Perl/Moose)的所有子类访问的静态变量?

php - PRCE : substring exclusion in capturing group result

perl - 如何在 Moose 中使用 ArrayRef[Class]

java - 覆盖继承的变量名

c++ - 全局操作符 + 覆盖冲突检测

regex - 过早退出 Perl File::Find

Python 默认继承?

swift - 为什么我们要在 Swift 中覆盖初始化器?