加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

oo perl 继承问题

发布时间:2020-12-16 00:17:24 所属栏目:大数据 来源:网络整理
导读:wxPerl是一个纯oo的gui库。今天在看它的例子的时候,也试了一下不同的继承方法。 在wxPerl的hello.pl中是这样用的: use vars qw(@ISA); @ISA = qw(Wx::App); 在programming Perl里查了一下use vars这个pragma. 发现,这种用法已经在某种程度 上废弃了,因为
wxPerl是一个纯oo的gui库。今天在看它的例子的时候,也试了一下不同的继承方法。
在wxPerl的hello.pl中是这样用的:
use vars qw(@ISA);
@ISA = qw(Wx::App);
在programming Perl里查了一下use vars这个pragma. 发现,这种用法已经在某种程度
上废弃了,因为有了our. 上面的代码等同于:
our (@ISA) = qw(Wx::App);
他们的作用都是定义一个包全局变量。 要注意的是不要混合使用,即,不要在一段
代码中对@ISA同时使用use vars 和 our。(在一个文件里定义一个以上的包时)
除了这两种方法,还可以用:
use base qw(Wx::App);
这段代码等价于:
BEGIN{
????require Wx::App;??#?注意,这里用的是裸字。具体看require的介绍
????push @ISA,qw(Wx::App);

还发现了一个小问题,在用 的时候,父类必须以1;结尾,而另外两种方法,不用也有可能ok.

这可能是require的原因。

@ISA数组中列出的类(包)表明了当前类的父类(parent class)或基类(base class)。它是Perl赖以实现继承的方式。@ISA数组中含有类(包)的列表,当Perl在当前类(包)中无法找到所需方法时,便会在该数组列出的类中查找。如果还是找不到的话,Perl还会搜索并调用AUTOLOAD函数。如果仍然找不到的话,Perl会在预定义的UNIVERSAL包中进行最后的搜索。UNIVERSAL类时所有包的全局基类,也是类继承机制中位于最顶层的类。

在通常的子例程调用过程中,并不会搜索@ISA数组。但如果用户以调用方法的语法来调用子程序的话,程序就会去搜索@ISA数组。

如果Perl 一个包没有new函数进行定义,但是需要调用这个包里面的函数,那么一种方法就是将该包的那个函数用一下方法加入ISA。之后在另一个包中在该函数加入& 。

require Exporter;
use vars ('@ISA');
@ISA = qw(Exporter);
our @EXPORT= qw(函数名称);

第二种方法就是在开头加入 use 包路径名,之后用 类名->包路径名::函数名 的方式来引用该包下的函数。。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读