免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1728 | 回复: 4
打印 上一主题 下一主题

请教大家一个高级的面向对象问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-14 15:40 |只看该作者 |倒序浏览
我想实现一个功能,即。在一个程序中,每次new一个新的对象之前,都先启动一个方法。并将数据传入。就是这样的一个钩子。请教大家了!我要如何才能实现这个功能。即类似AUTOLOAD这样的方法!AUTOLOAD是在找不到sub 的时候调用,我希望能找到一个可以在调用子程序时找到子程序就调用的方法。就是AUTOLOAD的相反的方法。

[ 本帖最后由 fengpxu 于 2007-6-14 19:52 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-06-19 21:07 |只看该作者
大家阿!帮帮忙拉!

论坛徽章:
0
3 [报告]
发表于 2007-06-19 23:16 |只看该作者
不是很懂你的描述
可不可以在new函数中调用别的package的方法来满足你的需求呢?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2007-06-20 08:13 |只看该作者
if ( can(method) ){
    # call method....
}

http://bbs.chinaunix.net/viewthread.php?tid=770196&extra=page%3D1
  1.     can(METHOD)
  2.         "can" 检查一个对象是不是拥有一个叫做 "METHOD" 的方法。如果有,那么
  3.         将返回那个方法(实际上就是子程序)的引用。如果没有,那么返回 *undef*

  4.         也可以用两个参数来直接调用 "UNIVERSAL::can"。当第一个参数不是一个对
  5.         象或者是类名的时候,它返回 *undef*,所以我们也可以用这个办法知道一个
  6.         引用是不是一个对象。

  7.             print "It's still an object\n" if UNIVERSAL::can($val, 'can');

  8.         你也可以用 Scalar::Util 模块的 "blessed" 函数来达到同样的目的:

  9.             use Scalar::Util 'blessed';

  10.             my $blessing = blessed $suspected_object;

  11.         如果 $suspected_object 是一个对象,那么 "blessed" 返回对象所属的类名
  12.         称,不然返回 "undef"。
复制代码

多看看文档,总是好的。

论坛徽章:
0
5 [报告]
发表于 2007-06-20 16:09 |只看该作者
原帖由 flw 于 2007-6-20 08:13 发表
if ( can(method) ){
    # call method....
}

http://bbs.chinaunix.net/viewthr ... &extra=page%3D1
[code]    can(METHOD)
        "can" 检查一个对象是不是拥有一个叫做 ...

又学了一招 哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP