Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 当我有多重继承时,SUPER是未定义的_Perl_Oop - Fatal编程技术网

Perl 当我有多重继承时,SUPER是未定义的

Perl 当我有多重继承时,SUPER是未定义的,perl,oop,Perl,Oop,下面是一个最小化的示例,其中我有OA.pm(父对象)、OB.pm子对象和运行程序脚本: 对象OB: package OB; use OA; require Exporter; @ISA = (Exporter, OA); @EXPORT = (); sub new { my $class = shift; print $class->SUPER; bless {}, $class; }; 1; 对象OA: package OA; require Expo

下面是一个最小化的示例,其中我有
OA.pm
(父对象)、
OB.pm
子对象和运行程序脚本:

对象OB:

package OB;

use OA;
require Exporter;
@ISA = (Exporter, OA);
@EXPORT = ();

sub new {
    my $class = shift;

    print $class->SUPER;
    bless {}, $class;
};

1;
对象OA:

package OA;

require Exporter;
@ISA = (Exporter);
@EXPORT = ();

sub new {
    bless {}, shift;
};

1;
跑步者:

#!/usr/bin/perl

use strict;
use warnings;
use OB;

print OB->new;
当我运行它时,我得到:

无法通过OB.pm第10行的包“OB”找到对象方法“SUPER”。

1) 有什么不对劲吗

2) 如果我有一个以上的父母,那么SUPER会指向什么


3) 是否必须使用OA?

与Ruby不同,您必须明确说明所指的整个方法

print $class->SUPER::new;
这是假设您想要调用该方法。如果您的目的是找出哪个父类包含新方法,这很复杂,我将跳过这里的解释

如果您的类有多个父类多重继承,Perl通常会首先通过父类深度查找匹配方法。这通常是有问题的,您可以切换到with
use mro“c3”
,这样可以避免错误


最后,
useoa
requireoa
是加载OA类所必需的。您可以使用在一行中加载和继承类。

您好,我刚刚更新了我的问题,我将其分为三部分,您能检查一下吗?(第二个和第三个)得到并更新了它。你打算从
print$class->SUPER
中得到什么?没什么,我试图创建一个真正最小化的示例。。。由于perl通常只打印它的内存地址,只是为了查看它是否工作,请注意,您不需要从Exporter继承。您只需要
使用导出器qw(导入)