【问题标题】:Do I need Exporter if I'm going for pure OO in Perl?如果我要在 Perl 中使用纯 OO,我是否需要 Exporter?
【发布时间】:2009-02-03 13:29:18
【问题描述】:

文档(Exporter 和 perlmodlib)说:

作为一般规则,如果模块是 然后尝试面向对象 什么都不导出。

但是 perlmodlib 也说:

标准的、捆绑的模块都是 期望表现在一个定义明确的 关于命名空间的方式 污染,因为他们使用 导出器模块。

所以我想知道,如果你去 OO 并且什么都不导出,你真的需要 Exporter 吗?如果你不这样做,这是否意味着没有一个标准模块在这个意义上是严格的面向对象的,或者这是否意味着它们EXPORT_OK 某些事情,因为如果有人想从你的模块继承,你需要这样做? (这是真的吗?)或者您是否需要 Exporter 才能use MyModule; ... = new MyModule?

【问题讨论】:

    标签: perl oop module perl-module exporter


    【解决方案1】:

    你是对的。如果一切都被称为 OBJECT::sub() 或 $obj->sub(),你应该没问题。

    对于继承,您需要使用@ISA,为此,您不需要导出器。

    另外,你给出的第二个引用是关于导出数据注入模块的。

    如果您对使用 Exporter 导出的库使用:use libname ();,则保证不会导出任何内容。这就是它可以用来防止命名空间污染的方式。如果您通过函数名称显式导出,则只有这些函数。

    【讨论】:

    • 我刚刚找到了 Pod::Template,它回答了我的问题,但我对 @ISA 在那里却没有使用感到困惑。这样就澄清了——非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 2018-12-27
    • 2017-10-03
    • 2016-08-19
    • 2011-12-29
    • 2018-11-24
    相关资源
    最近更新 更多