Perl面向对象编程中方法的调用

开发 架构
Perl面向对象编程有很多值得学习的地方,这里向大家简单介绍一下Perl面向对象编程中方法的调用问题,希望对你的学习有所帮助。

本文和大家重点讨论一下Perl面向对象编程的概念,Perl的方法定义不提供任何特殊语法,但规定方法的第一个参数为对象或其被引用的包。Perl有两种方法:静态方法和虚方法。下面请看详细介绍。

Perl面向对象编程-方法的调用

1、方法

Perl类的方法只不过是一个Perl子程序而已,也即通常所说的成员函数。Perl的方法定义不提供任何特殊语法,但规定方法的第一个参数为对象或其被引用的包。Perl有两种方法:静态方法和虚方法。
Perl面向对象编程中静态方法第一个参数为类名,虚方法第一个参数为对象的引用。方法处理第一个参数的方式决定了它是静态的还是虚的。静态方法一般忽略掉第一个参数,因为它们已经知道自己在哪个类了,构造函数即静态方法。虚方法通常首先把第一个参数shift到变量self或this中,然后将该值作普通的引用使用。如:

1.subnameLister{
2.my$this=shift;
3.my($keys,$value);
4.while(($key,$value)=each(%$this)){
5.print"\t$keyis$value.\n";
6.}
7.}

2、方法的输出

Perl面向对象编程中如果你现在想引用Cocoa.pm包,将会得到编译错误说未找到方法,这是因为Cocoa.pm的方法还没有输出。输出方法需要Exporter模块,在包的开始部分加上下列两行:
requireExporter;
@ISA=qw(Exporter);
这两行包含上Exporter.pm模块,并把Exporter类名加入@ISA数组以供查找。接下来把你自己的类方法列在@EXPORT数组中就可以了。例如想输出方法closeMain和declareMain,语句如下:
@EXPORT=qw(declareMain,closeMain);

Perl类的继承是通过@ISA数组实现的。@ISA数组不需要在任何包中定义,然而,一旦它被定义,Perl就把它看作目录名的特殊数组。它与@INC数组类似,@INC是包含文件的寻找路径。@ISA数组含有类(包)名,当一个方法在当前包中未找到时就到@ISA中的包去寻找。@ISA中还含有当前类继承的基类名。

类中调用的所有方法必须属于同一个类或@ISA数组定义的基类。如果一个方法在@ISA数组中未找到,Perl就到AUTOLOAD()子程序中寻找,这个可选的子程序在当前包中用sub定义。若使用AUTOLOAD子程序,必须用useAutoload;语句调用autoload.pm包。AUTOLOAD子程序尝试从已安装的Perl库中装载调用的方法。如果AUTOLOAD也失败了,Perl再到UNIVERSAL类做最后一次尝试,如果仍失败,Perl就生成关于该无法解析函数的错误。

3、方法的调用

Perl面向对象编程中调用一个对象的方法有两种方法,一是通过该象的引用(虚方法),一是直接使用类名(静态方法)。

【编辑推荐】

  1. 深入剖析Perl面向对象编程
  2. Perl面向对象编程的两种实现和比较
  3. Perl学习笔记 Perl双引号和单引号的区别
  4. 揭秘Perl变量中Perl纯变量用法
  5. 深入解析Perl内部函数的使用
责任编辑:佚名 来源: csdn.net
相关推荐

2010-07-20 13:44:02

Perl方法

2010-07-20 09:33:14

Perl方法

2010-07-13 13:06:41

Perl面向对象

2010-07-13 17:18:29

Perl面向对象编程

2010-07-16 17:23:57

Perl面向对象编程

2010-07-20 09:23:30

Perl构造函数

2010-07-20 09:13:55

Perl面向对象编程

2010-07-13 14:54:15

Perl面向对象编程

2010-07-13 10:47:18

Perl面向对象

2011-07-21 17:19:47

java面向对象

2012-01-17 09:34:52

JavaScript

2017-04-21 09:07:39

JavaScript对象编程

2009-06-22 13:48:00

Java编程思想面向对象

2010-11-17 11:31:22

Scala基础面向对象Scala

2022-07-30 23:41:53

面向过程面向对象面向协议编程

2012-12-13 11:01:42

IBMdW

2012-02-27 09:30:22

JavaScript

2011-05-25 11:15:02

Javascript继承

2011-06-28 11:06:16

Scala

2023-01-10 09:06:17

点赞
收藏

51CTO技术栈公众号