免费注册 查看新帖 |

Chinaunix

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

一个打印父类的小程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-27 15:47 |只看该作者 |倒序浏览
看到Python板有人写了一个打印父类的程序(http://bbs3.chinaunix.net/thread-1378577-1-1.html
感觉很有意思.
我也写一个.....

  1. sub parents{
  2.   my ($modual_name) = shift;
  3.   no strict 'refs';
  4.   return @{$modual_name.'::ISA'};
  5. }
  6. sub derived_tree{
  7.   my $modual_name = shift;
  8.   my $indent = ' ' x 4;
  9.   my $level = 0;
  10.   my @stack;
  11.   push @stack, [$modual_name, $level];
  12.   while(@stack){
  13.     ($modual_name, $level) = @{pop @stack};
  14.     print $indent x $level, $modual_name, "\n";
  15.     push @stack, map{[$_, $level + 1]}
  16.       parents($modual_name);
  17.    }
  18. }
  19. use IO::File;
  20. derived_tree('IO::File');

  21. --------output--------
  22. IO::File
  23.     Exporter
  24.     IO::Seekable
  25.         Exporter
  26.     IO::Handle
  27.         Exporter
复制代码

[ 本帖最后由 DQP 于 2009-2-27 15:48 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2009-02-27 16:40 |只看该作者
这个用 Devel::Symdump 的 inh_tree/isa_tree 就可以了。

论坛徽章:
0
3 [报告]
发表于 2009-02-27 19:47 |只看该作者
写的很好呀,感谢分享,刚学perl
不过看了好一会才看懂
我写了一个,用了一下递归
#!/usr/bin/perl
no strict "refs";

$level=0;
sub printdrv{
        my $class=shift;
        print "\t"x$level."$class\n";
        my @base=@{$class.'::ISA'};
        do{$level--;return;} unless (@base) ;
        $level++;
        for(@base){
                &printdrv($_);
        }
}
use IO::File;
printdrv(IO::File);

输出:
IO::File
        IO::Handle
                Exporter
        IO::Seekable
                Exporter
        Exporter

跟你的结果相反哟

[ 本帖最后由 dream3401 于 2009-2-27 20:37 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2009-02-27 21:27 |只看该作者
原帖由 MMMIX 于 2009-2-27 16:40 发表
这个用 Devel::Symdump 的 inh_tree/isa_tree 就可以了。


  谢谢。  我去看看

论坛徽章:
0
5 [报告]
发表于 2009-02-27 21:33 |只看该作者

回复 #3 dream3401 的帖子

观察的很细哦
赞一个
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP