perl 的Class::MethodMaker
来源:互联网 发布:mac队全灭动态图解 编辑:程序博客网 时间:2024/06/03 12:57
看到perl inter 进展缓慢,不过也不着急,看看这个模块的文档吧,虽然现在有很多OO的模块,我先看这个的。
基础牢固了再去看那些复杂的,后面想看看anyevent,template tootkit ,dancer ,mojo, catalyst, PSGI/Plack.好多啊....
大概翻译如下,有点混乱。
名称:
Class::MethodMaker -为perl面向对象编程创建泛型方法。
内容简介:
use Class::MethodMaker [ scalar => [qw/ foo bar baz /], new => [qw/ new /] , ];
都是 use Class::MethodMaker
[
componet => [option, 'method' ],
]
这种形式,下面具体介绍一下 组件,选项,方法名称是自己设置的。
描述:
This module solves the problem of having to continually write accessor methods for your objects that perform standard tasks.
本模块能解决如下问题:不断给对象编写辅助方法(如set_sth get_sth),减少工作量。
The argument to 'use' is an arrayref, as pairs whose "keys" are the names of types of generic methods generated by MethodMaker and whose "values" tell method maker what methods to make.
Use的参数 是一个数组引用,数组中参数成对出现,键是泛型方法的类型名,值是告诉方法创造者创造什么方法。
To override any generated methods, it is sufficient to ensure that the overriding method is defined when Class::MethodMaker is called. Note that the use keyword introduces a BEGIN block, so you may need to define (or at least declare) your overriding method in a BEGIN block.
为了重载任意继承的方法,它充分保证了重载的方法会在 Class::MethodMaker被调用时被定义。注意:use关键字接受一个BEGIN块,所以你需要定义你重载的方法在BEGIN块里。
简单用法:
一个简单的使用Class::MethodMaker的类如下:
package MyClass;
use Class::MethodMaker
[ scalar => [qw/ name /],
new => [qw/ new /],
];
所创建的类,使用new 创建实例,每个实例有一个 叫name的 标量组件。 使用方法name,name_reset 和name_isset 可以 查询,设置或重置 name。
package main;
my $m = MyClass->new;
my $n;
$\ = "\n";
print $m->name_isset ? "true" : "false"; # false
$m->name("foo");
$n = $m->name;
print defined $n ? "->$n<-" : "*undef*"; # ->foo<-
print $m->name_isset ? "true" : "false"; # true
$m->name(undef);
$n = $m->name;
print defined $n ? "->$n<-" : "*undef*"; # *undef*
print $m->name_isset ? "true" : "false"; # true
$m->name_reset;
$n = $m->name;
print defined $n ? "->$n<-" : "*undef*"; # *undef*
print $m->name_isset ? "true" : "false"; # false
可用的组件类型包括 scalar,array和hash。还有几种非数据类型的用法:new(构造器),deep_copy 和copy(对象拷贝), abstract(创建抽象方法(纯虚函数))
由于pod上没有介绍非数据类型的选项配合方法,下面是数据类型组件的一些选项:
需要参数的选项,用{}括起来,不需要的参数的如static 可以直接单独写出,这些选项作用于最近的一个方法;
多个方法可以连续写在一个里面;
每个组件(数据组件)有一些选项:
-static 每个类而非每个实例的数据。
-type 规定数据的类型 type后面接 类名。
-forward 调用 数据对象的相应方法
package X;
use Class::MethodMaker
[scalar => [{ -type => 'File::stat',
-forward => [qw/ mode size /], },
'st1',
],
])},
Package main;
use File::stat;
my $a= X->new;
my $file=stat(“/etc/tmp”);
$a->stl($file);
$a->size; # forward to $file->size;
-default/-default_ctr 设置默认值,默认的coderef
-read_cb/-store_cb (略)
最后附上自己的测试代码:
use File::stat; use strict;{package animal; use File::stat;use Class::MethodMaker [ new => [qw(new)],array => 'ab',scalar => [ +{-default => 'brown'},'color' ,qw(height age name )],scalar => [ { -type => 'File::stat', -forward=>[qw/mode size/] },'hehe',],abstract =>[qw(sound)],];sub named {my $self = shift->new;$self->name(shift);$self;}sub speak{my $self = shift;print $self->name,' goes ', $self->sound,"\n";}sub eat{my $self = shift;my $food = shift;print $self->name, " eats $food \n";}}local $\ ="\n";my $a= animal->named('lily');print $a->name,"\n";print $a->ab(1,4),"\n";$a->eat("banana");print $a->color;my $w= stat("d://1.txt");$a->hehe($w);print $a->size;
总结:
看的头晕眼花,四肢乏力,这个模块确实节约很大力气再设置accesor上面。
不过,关于new的设置不知道是个什么情况。
intermediate perl 159页的代码和这个有出入,也许是版本问题吧,就先不管那么多了,目的一致即可,还有更多更好的OO模块,以后慢慢学习。
- perl 的Class::MethodMaker
- perl(Class::MethodMaker) is needed by MySQL-ndb-tools-5.1.21-0.glibc23.i386
- 好用的Perl包 Class::Ref
- A simple perl class
- Perl Class::Struct
- Perl Class::Accessor 分析
- perl---inheritance of one class
- Perl: class method and instance method
- 神奇的Perl-最佳Perl入门读物
- perl Statistics::Descriptive Perl 的统计模块
- Perl入门(三)Perl的数组
- Perl入门(六) Perl方法的使用
- com和perl和perl的关联
- perl和application和perl的关联
- perl 处理perl返回的json
- Perl的包
- perl的建树算法
- Perl的现状
- InputStream和OutputStream
- IE6/IE7中li底部3px的Bug
- 编程之美——子数组之和的最大值(二维)
- STL源码剖析——序列式容器
- hdu1108
- perl 的Class::MethodMaker
- 理解onMeasure
- sql替换字符 空格 回车
- 深入理解Linux内核
- 【应用赏析】使用移动GIS技术改进你的企业和项目
- c++ string详解
- 学信网
- 设计模式九(单例模式,python语言实现)
- 星际译王,金山词霸,有道词典,词库下载 1