什么是Perl中的@ISA数组?

16
our @ISA = "Critter";

何时会使用@ISA?

以及为什么要使用our @ISA?


7
http://perldoc.perl.org/perlobj.html - Mat
1
我认为你不想将"Critter"分配给@ISA,因为前者是标量而后者是数组。 - user554546
1
我不建议直接赋值给 @ISA。相反,使用 use base 'Critter'; 或者更新的 use parent 'Critter';。它们同样需要基础模块。请参考 baseparentperlobj - Palec
2个回答

33
为了扩展Mat的评论,类似这样的东西在perldocs中有广泛的记录。
关于@ISA这里是它的说明

一个类只是一个包

...

每个包都包含一个特殊的数组,称为@ISA@ISA数组包含该类的父类列表(如果有)。当Perl执行方法解析时,将检查此数组,我们稍后会讨论。

可以手动设置@ISA,您可能会在较旧的Perl代码中看到此设置。更早的代码还使用base pragma。对于新代码,我们建议您使用parent pragma 声明父类。此pragma将负责设置@ISA。它还将加载父类并确保包不会从自身继承。

无论如何设置父类,包的@ISA变量将包含这些父类的列表。这只是一个标量列表,每个标量都是与包名称对应的字符串。

our@ISA密切相关,因为 @ISA预期为包变量。

8

@ISA代表“是一个”的意思,这意味着数组包含父包。


我们拒绝了一个本应该是单独的回答或评论的建议编辑,如果有人想看的话,可以链接查看。 - Palec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接