Perl Class::Accessor 分析
发布时间:2020-12-16 00:32:13 所属栏目:大数据 来源:网络整理
导读:最近学习Perl OO,MetaClass 相关的模块,简单的分析一下Class::Accessor 这个模块。 功能: 自动实现字段的存取定义函数。 示例: package Foo; use base qw(Class::Accessor); Foo-follow_best_practice; Foo-mk_accessors(qw(name role salary)); #script
最近学习Perl OO,MetaClass 相关的模块,简单的分析一下Class::Accessor 这个模块。
功能: 自动实现字段的存取定义函数。 示例: package Foo; use base qw(Class::Accessor); Foo->follow_best_practice; Foo->mk_accessors(qw(name role salary)); #script body use Data::Dumper; $x = Foo->new({ name => "Marty",role => "JAPH",salary => 8000 }); $x->salary(9000); print $x->name; print Dumper $x 分析: 1. 用户使用函数: ?mk_accessors ?mk_ro_accessors ?mk_wo_accessors ?get/set 2. 内部调用关系 ?mk_accessors?????????????? ? ?? ????? ? ? ? ? ? ? ? ?? ? ? ? mk_accessor ?mk_ro_accessors???? => _mk_accessors => mk_ro_accessor ?? => get/set ?mk_wo_accessors?? ? ?? ??????????????????????????? ? ? ? mk_wo_accessor _mk_accessors 将为每个属性(name)添加如下两个函数并插入模块的符号表中,实际他们指向相同的函数,后者只是作为兼容使用而已。 1) name 闭包,读写都是这个函数调用负责get/set来完成 2) _name_accessor 如果使用follow_best_practice,则函数名字变为如下两个,分别负责读写操作,也分别对应mk_ 函数 1) get_name 对应mk_ro_accessor 2) set_name 对应mk_wo_accessor 最后调用的还是get/set函数,而对read/write 控制实际是掌握在mk_ro_accessor/mk_wo_accessor 中。 小结: 对于这个模块,只是简单的实现了字段的读取函数,虽然可以通过函数实现只读或者只写,但实际通过直接hash来提取,修改或者添加,删除属性都是可以的,认识到模块的功能和不足可以更加方便的使用之。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |