Perl中的AFAIK继承通常设置如下:
package Mule;
our @ISA = ("Horse", "Donkey");
Run Code Online (Sandbox Code Playgroud)
是否有更好的例子use base
(或use parent
)更好?
use base qw(Horse Donkey);
Run Code Online (Sandbox Code Playgroud)
这大致相当于:
BEGIN {
require Horse;
require Donkey;
push @ISA, qw(Horse Donkey);
}
Run Code Online (Sandbox Code Playgroud)
如果您需要加载模块代码以及继承模块代码,它会更整洁.顺便说一句,有多重继承的问题,但这是一个不同的问题:)
编辑:编译时v.运行时优势:
如果您想在运行时决定使用给定的模块,那么您可以测试并将模块添加到您的父级:
if(eval {require X}){push @ISA,'X'; }
在编译时建立继承可以避免特别难以调试的依赖循环,如下所示。
# Child.pm
package Child;
our @ISA = qw(Mother);
use Foo;
# Mother.pm
package Mother;
sub wibble { 42 }
# Foo.pm
package Foo;
use Child;
Child->wibble;
Run Code Online (Sandbox Code Playgroud)
Child->wibble
如果您在“使用 Foo”之前“使用 Child”,那么 Foo 将在其建立继承之前尝试调用Mother
。如果相反,Childuse parent qw(Mother)
会在尝试加载其他任何内容之前建立其继承。
我在私人公司代码中经历了这种依赖循环,它往往比公共代码更加交织在一起。调试很糟糕,这就是为什么我建议总是在编译时建立继承。
归档时间: |
|
查看次数: |
503 次 |
最近记录: |