perl中ISA是什么东西?

Havard 2010-03-11 01:36:01
大家看看,这一段代码是什么意思?
晕啊,楞是看不懂:
package Graph::Base;
use vars qw(@ISA);
require Exporter;
@ISA = qw(Exporter);
...全文
1740 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
路人甲三号 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

六、方法的输出
如果你现在想引用Cocoa.pm包,将会得到编译错误说未找到方法,这是因为Cocoa.pm的方法还没有输出。输出方法需要Exporter模块,在包的开始部分加上下列两行:
require Exporter;
@ISA = qw (Exporter);
这两行包含上Exporter.pm模块,并把Exporter类名加入@ISA数组以供查找。……
[/Quote]
留个记号
iambic 2010-03-11
  • 打赏
  • 举报
回复
建议在学习《Learning Perl》之后阅读《Intermediate Perl》。也是很好的一本书,循序渐进。
Aylazhang 2010-03-11
  • 打赏
  • 举报
回复
嗯。基本上明白了。
Havard 2010-03-11
  • 打赏
  • 举报
回复
我想我是终于彻底明白了,
自己再来补充点,
use vars qw(@ISA);是说把@ISA变成包全局变量,所以能在整个包中使用, 注意和my的不同,
require Exporter类似于use,导入包或程序,他们之间有些差别
@ISA是用来表明Graph::Base要用于查看父包,而exporter可以用于输出方法。恰好可以使得这段代码的方法可以输出。Exporter没用写成这样:@Exporter=qw(a, b, c)保证了里面的所有方法都可以输出。
Aylazhang 2010-03-11
  • 打赏
  • 举报
回复
package Graph::Base;
use vars qw(@ISA);
require Exporter;
@ISA = qw(Exporter)

这几行说明 Graph::Base; 这个类是 Exporter 的一个子类。
老三行可以用一行代替。
wxgiter 2010-03-11
  • 打赏
  • 举报
回复
呵呵 学习...
Havard 2010-03-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 aylazhang 的回复:]
usr vars (xxx) 是老的方法。
新的用our;
另外
Perl codeuse vars qw(@ISA);require Exporter;@ISA= qw(Exporter);

这三行。用新的语法
Perl codeuse base qw(Exporter);
[/Quote]
您是说三行都可以用use base qw(Exporter);来表示吗?
问题是我不理解这三行的干什么得,也不理解你的代码
Aylazhang 2010-03-11
  • 打赏
  • 举报
回复
usr vars (xxx) 是老的方法。
新的用our;
另外
use vars qw(@ISA);
require Exporter;
@ISA = qw(Exporter);


这三行。用新的语法
use base qw(Exporter);

Havard 2010-03-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fibbery 的回复:]
引用 4 楼 havard 的回复:
但是,你这里没解释use vars qw(@ISA);


这句话是从vars包中引入@ISA变量.
[/Quote]
莫名了,他引入这个变量干吗呢?这上面这些就是代码的前部分了。@ISA数组中没有加入任何元素~
下面是全部代码
package Graph::Base;
use vars qw(@ISA);
require Exporter;
@ISA = qw(Exporter);
# new
#
# $G = Graph->new(@V)
#
# Returns a new graph $G with the optional vertices @V.
#
sub new {
my $class = shift;
my $G = { };
bless $G, $class;
$G->add_vertices(@_) if @_;
return $G;
}
Page 291
# add_vertices
#
# $G = $G->add_vertices(@v)
#
# Adds the vertices to the graph $G, returns the graph.
#
sub add_vertices {
my ($G, @v) = @_;
@{ $G->{ V } }{ @v } = @v;
return $G;
}
# add_vertex
#
# $G = $G->add_vertex($v)
#
# Adds the vertex $v to the graph $G, returns the graph.
#
sub add_vertex {
my ($G, $v) = @_;
return $G->add_vertices($v);
}
# vertices
#
# @V = $G->vertices
#
# In list context returns the vertices @V of the graph $G.
# In scalar context (implicitly) returns the number of the vertices.
#
sub vertices {
my $G = shift;
my @V = exists $G->{ V } ? values %{ $G->{ V } } : ();
return @V;
}
# has_vertex
#
# $b = $G->has_vertex($v)
#
# Returns true if the vertex $v exists in
# the graph $G and false if it doesn't.
#
sub has_vertex {
my ($G, $v) = @_;
return exists $G->{ V }->{ $v };
}
Havard 2010-03-11
  • 打赏
  • 举报
回复
呵呵,那个网站打不开
Havard 2010-03-11
  • 打赏
  • 举报
回复
谢谢fibbery,
你这个教程很好,能分享下吗?
fibbery 2010-03-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 havard 的回复:]
但是,你这里没解释use vars qw(@ISA);
[/Quote]

这句话是从vars包中引入@ISA变量.
Havard 2010-03-11
  • 打赏
  • 举报
回复
想应该是说所有得变量vars,都要从@ISA查找方法,不知对不对
Havard 2010-03-11
  • 打赏
  • 举报
回复
但是,你这里没解释use vars qw(@ISA);
fibbery 2010-03-11
  • 打赏
  • 举报
回复
fibbery 2010-03-11
  • 打赏
  • 举报
回复
六、方法的输出
如果你现在想引用Cocoa.pm包,将会得到编译错误说未找到方法,这是因为Cocoa.pm的方法还没有输出。输出方法需要Exporter模块,在包的开始部分加上下列两行:
require Exporter;
@ISA = qw (Exporter);
这两行包含上Exporter.pm模块,并把Exporter类名加入@ISA数组以供查找。接下来把你自己的类方法列在@EXPORT数组中就可以了。例如想输出方法closeMain和declareMain,语句如下:
@EXPORT = qw (declareMain , closeMain);
Perl类的继承是通过@ISA数组实现的。@ISA数组不需要在任何包中定义,然而,一旦它被定义,Perl就把它看作目录名的特殊数组。它与@INC数组类似,@INC是包含文件的寻找路径。@ISA数组含有类(包)名,当一个方法在当前包中未找到时就到@ISA中的包去寻找。@ISA中还含有当前类继承的基类名。
类中调用的所有方法必须属于同一个类或@ISA数组定义的基类。如果一个方法在@ISA数组中未找到,Perl就到AUTOLOAD()子程序中寻找,这个可选的子程序在当前包中用sub定义。若使用AUTOLOAD子程序,必须用use Autoload;语句调用autoload.pm包。AUTOLOAD子程序尝试从已安装的Perl库中装载调用的方法。如果AUTOLOAD也失败了,Perl再到UNIVERSAL类做最后一次尝试,如果仍失败,Perl就生成关于该无法解析函数的错误。
fibbery 2010-03-11
  • 打赏
  • 举报
回复
有关于继承的环境变量.

37,742

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧