下面语句为使用该包创建对象的例子:

1 #!/usr/bin/perl
2 push (@INC,'pwd'); #Dos下为 cd 命令
3 use Cocoa;
4 $cup = new Cocoa;

第一行指出Perl解释器的位置, 第二行中,将当前目录加到路径寻找列表@INC中供寻找包时使用。你也可以在不同的目录中创建你的模块并指出该绝对路径。例如,如果在/home/test/scripts/创建包,第二行就应该如下:

push (@INC , "/home/test/scripts");

在 第三行中,包含上包Cocoa.pm以获取脚本中所需功能。use语句告诉Perl在@INC路径寻找文件Cocoa.pm并包含到解析的源文件拷贝中。 use语句是使用类必须的。第四行调用new函数创建对象,这是Perl的妙处,也是其易混淆之处,也是其强大之处。创建对象的方法有多种,可以这样写:

$cup = cocoa->new();

如果你是C程序员,可以用双冒号强制使用Cocoa包中的new()函数,如:

$cup = Cocoa::new();

可以在构造函数中加入更多的代码,如在Cocoa.pm中,可以在每个对象创建时输出一个简单声明,还可以用构造函数初始化变量或设置数组或指针。

注意:

1、一定要在构造函数中初始化变量;
2、一定要用my函数在方法中创建变量;
3、一定不要在方法中使用local,除非真的想把变量传递给其它子程序;
4、一定不要在类模块中使用全局变量。

加上声明的Cocoa构造函数如下:

sub new {
    my $this = {};
    print "/n /* /n ** Created by Cocoa.pm /n ** Use at own risk";
    print "/n ** Did this code even get pass the javac compiler? ";
    print "/n **/ /n";
    bless $this;
    return $this;
}

也可以简单地调用包内或包外的其它函数来做更多的初始化工作,如:

sub new {
    my $this = {}
    bless $this;
    $this->doInitialization();
    return $this;
}

创建类时,应该允许它可被继承,应该可以把类名作为第一个参数来调用new函数,那么new函数就象下面的语句:

sub new {
    my $class = shift; # Get the request class name
    my $this = {};
    bless $this, $class # Use class name to bless() reference
    $this->doInitialization(); return $this;
}
此方法使用户可以下列三种方式之一来进行调用:

・Cocoa::new()
・Cocoa->new()
・new Cocoa
本人最喜欢的类似于JAVA的实例化方法: new Cocoa()

可以多次bless一个引用对象,然而,新的将被bless的类必然把对象已被bless的引用去掉,对C和Pascal程序员来说,这就象把一个指针赋给分配的一块内存,再把同一指针赋给另一块内存而不释放掉前一块内存。总之,一个Perl对象每一时刻只能属于一个类。

对象和引用的真正区别是什么呢?Perl对象被bless以属于某类,引用则不然,如果引用被bless,它将属于一个类,也便成了对象。对象知道自己属于哪个类,引用则不属于任何类。

・实例变量

作为构造函数的new()函数的参数叫做实例变量。实例变量在创建对象的每个实例时用于初始化,例如可以用new()函数为对象的每个实例起个名字。可以用匿名哈希表或匿名数组来保存实例变量。用哈希表的代码如下:

sub new {
    my $type = shift;
    my %parm = @_;
    my $this = {};
    $this->{'Name'} = $parm{'Name'};
    $this->{'x'} = $parm{'x'};
    $this->{'y'} = $parm{'y'};
    bless $this, $type;
}

用数组保存的代码如下:

sub new {
    my $type = shift;
    my %parm = @_;
    my $this = [];
    $this->[0] = $parm{'Name'};
    $this->[1] = $parm{'x'};
    $this->[2] = $parm{'y'};
    bless $this, $type;
}

构造对象时,可以如下传递参数:

my $mug = Cocoa::new( 'Cocoa','Name' => 'top','x' => 10,'y' => 20 );

本人喜欢的实例话方式为 :

my $mug = new Cocoa ('Name' => 'top','x' => 10,'y' => 20);

操作符=>与逗号操作服功能相同,但=>可读性好。访问方法如下:

print "Name=$mug->{'Name'}/n";
print "x=$mug->{'x'}/n";
print "y=$mug->{'y'}/n";

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

Perl: Bless略解 z相关推荐

  1. 【Cylinder3D论文解读及代码略解】

    Cylinder3D论文解读及代码略解 论文解读 Abstract Introduction Related work 室内点云分割 室外点云分割 3D体素划分 Methodology(本文方法) C ...

  2. Golang 的 “omitempty” 关键字略解

    转载地址:Golang 的 "omitempty" 关键字略解 原文 :Golang 的 "omitempty" 关键字略解[1] 用法 熟悉 Golang 的 ...

  3. 《孙子略解》曹操注-2011

    [size=medium] 〈序〉 操闻上古弧矢之利,<论语>:「足兵.」<尚书>:「八政曰师.」<易>曰:「 师贞,丈人吉.」<诗>曰:「王赫斯怒,爰 ...

  4. Perl引用,解引用的对比总结(转)

    Perl引用,解引用的对比总结   标量 数组 散列 函数 定义符号 $ @ % & 定义 $test @test %test Sub test 使用 $test = 'a' @test = ...

  5. perl bless

    **********本文为转载,作者写的通俗易懂,很是受教,非常感谢您的分享********************** 程序说明 bless有两个参数:对象的引用.类的名称. 类的名称是一个字符串, ...

  6. Perl正则表达式详解

    Perl中的正则表达式使用示例 m//修饰符 LVALUE =~ m/PATTERN/; LVALUE =~ /PATTERN/; 修饰符 含义 /i 匹配时忽略大小写 /g 全局匹配,默认情况下,正 ...

  7. 正则化与L0、L1、L2范数略解

    机器学习模型需要拥有很好地泛化能力来适应训练集中没有出现过的新样本.在机器学习应用时,我们经常会遇到过度拟合(over-fitting)的问题,可能会导致训练出来的模型效果很差.接下来,我们将谈论的正 ...

  8. Dojo API略解续

    dojo.lang.string dojo.string.substituteParams 类似C#中的String.Format函数 %{name}要保证与传入的对象的名称大小写一致,否则会出异常 ...

  9. 类加载过程(时机)略解

    目录: java虚拟机汇总 class文件结构分析 1).class文件常量池中的常量项结构 2). 常用的属性表的集合 类加载过程<<== 现在位置 1).类加载器的原理以及实现 虚拟机 ...

最新文章

  1. PyQt5 技术篇-设置QComboBox下拉框默认值,获取下拉框当前选择的内容
  2. pandas to_csv 最左边 多一列 索引值 问题处理
  3. 敌兵布阵 HDU - 1166 (线段树)
  4. oracle 查看函数被哪些触发器引用_oracle如何查看存储过程,存储函数,触发器的具体内容...
  5. 微软冷箭射苹果:世界需要更开放的平台
  6. __attribute__((format(printf,m,n)))
  7. R_ggplot2地理信息可视化_史上最全(二)
  8. vb2010 连接mysql,VB连接数据库方式汇总
  9. 【梳理】离散数学 第15章 欧拉图与哈密顿图 15.3 最短路问题、中国邮递员问题与货郎担问题
  10. 牛客网 - [牛客假日团队赛6]Charm Bracelet(01背包)
  11. Echarts 大数据可视化基本使用
  12. 晶振旁的电阻(并联与串联)和电容的作用
  13. 风潮唱片-远方的寂静;专辑
  14. 机器学习之变分推断(三)基于平均场假设变分推断与广义EM
  15. golang的ECB加密代码文件下载
  16. Marlin:Preprocessing zkSNARKs with Universal and Updatable SRS学习笔记
  17. Android利用Cookie实现码源登录效果二
  18. 使用C++实现谷歌身份验证器(Google Authenticator)
  19. 计算机主机机箱面板指示灯,电脑主机指示灯不亮了是什么原因
  20. c语言编程小练习-九九乘法表

热门文章

  1. C# Winform Chart控件用法3 柱状图
  2. 【不是拷贝】rabbitmq安装延迟队列插件rabbitmq_delayed_message_exchange
  3. 夜总会管理系统mysql报告_酷越科技夜总会管理系统 ACCESS演示版
  4. 【GCN】: IntentGC算法框架
  5. 获取微信小程序登录code和获取手机号code
  6. 我的世界服务器怎么弄领地语言,《我的世界》服务器怎么设置领地 我的世界服务器领地指令大全...
  7. WebP格式介绍(附python版本代码用于对图像进行WebP编码和解码)
  8. 突破传统:Linux下如何架设BT服务器
  9. RoboCup智能机器人足球教程(五)
  10. 组装微型计算机需要哪些硬件设备,组装电脑需要哪些配件