perl - 我应该在编译时而不是运行时建立继承,如果是,为什么?

标签 perl inheritance

Perl 中的 AFAIK 继承通常是这样设置的:

package Mule;
our @ISA = ("Horse", "Donkey");

有没有示例 use base (或 use parent )更好吗?

最佳答案

use base qw(Horse Donkey);

这大致相当于:
BEGIN {
    require Horse;
    require Donkey;
    push @ISA, qw(Horse Donkey);
}

如果您需要加载模块代码并从它们继承,它会更整洁。顺便说一句,多重继承存在问题,但这是一个不同的问题:)

编辑:编译时与运行时的优势:
  • 您可以使用 use base 进行编译时检查的安全性,这意味着如果文件系统上不存在您的基本模块,您的脚本甚至都不会启动。
  • 如果您想决定在运行时使用给定模块,那么您可以测试该模块并将其添加到您的 parent :

    if (eval { 需要 X }) {
    推@ISA,'X';
    }
  • 关于perl - 我应该在编译时而不是运行时建立继承,如果是,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2257315/

    相关文章:

    java - 从孙类调用父类构造函数,调用父类或祖父类构造函数?

    vb.net - 是否可以在 VB.NET 中覆盖属性并返回派生类型?

    bash - 在交互式 bash shell 下运行系统命令

    perl - 是否可以保证在文档中的任何地方具有相同键的哈希值也具有相同的顺序?

    json - 在 Perl 中从 JSON-String 解码哈希

    oop - 什么时候使用委托(delegate)而不是继承?

    perl - 如何为 cmd 命令设置超时?

    regex - 正则表达式/"regular expression"中的正则是什么意思?

    java - java中的继承 : object state and behavior

    javascript - 是否可以扩展私有(private)功能?