【问题标题】:How can I export a function with Moose::Exporter?如何使用 Moose::Exporter 导出函数?
【发布时间】:2011-10-14 20:16:31
【问题描述】:

我想从一个我在所有子类中使用的基类中导出一个简单的函数,而不必一直使用 $self->myfunc(),只需一个简单的 func() 调用。

我尝试使用Moose::Exporter 中的示例进行此操作

但我不明白是什么

as_is     => [ 'sugar3', \&Some::Random::thing ],

正在做,因为示例似乎不完整。 Sugar3 没有在任何地方定义,所以我不知道在哪里或如何使用它。我现在可以在子类中调用 sugar3() 吗? Sugar3() 是 Moose 的秘密吗?

然后就是这个东西......字面意思

thing;

这是导出的,但我不知道这是在做什么,因为没有例子。这是函数调用吗?

无论如何,更重要的是您如何像通常使用 Exporter 一样导出函数,但使用 Moose Exporter, 如果我的基类在它之后有 3 级继承会发生什么,将所有子子类都可以访问这个导出的函数吗?

【问题讨论】:

  • 这并没有多大帮助,但考虑尝试像这样混合 OO 继承和包语法只会让我大吃一惊。你确定没有更好的方法来做你想做的事吗?此外,我相当肯定(尽管我也很容易出错)使用父级“Whatever”最终不会将函数导入本地包,所以它听起来与 Exporter 的方式没有什么不同工作。
  • 我不想混搭任何东西,我只是经常使用函数调用来调试打印和测试东西,但当我完成时我会清理它=]。无论如何,我仍然想了解这是如何工作的。 +1 感谢您分享您对此的看法
  • $self->myfunc()myfunc() 是两个非常不同的东西,您不应该编写一个方法然后尝试将它作为子导出。导出的函数将无法访问对象——也就是说,它不是面向对象的
  • +1 好点。看来我不应该在 Moose 中尝试这样做,但是如果我们不导出任何东西,为什么 Moose 会提供导出器呢?

标签: perl oop moose exporter


【解决方案1】:

as_is => [ ... ]:

此函数名称或子引用列表将按原样导出。您可以通过引用来识别子程序,这样可以方便地通过引用直接重新导出一些其他模块的功能(\&Some::Package::function)。

sugar3 是要导出的子名称。

是的,你现在可以在子类中调用sugar3,如果那是你将它导出到的地方。也就是说,将(除了常量之外的任何内容)导出到子类通常很奇怪。

是的,thing; 是一个子调用。在no strict;下,也可以和'thing';一样。

子类不能访问子类,除非它被作为方法调用(例如$o->thing; 而不是thing;)。但是,导出方法非常奇怪。创建一个 Moose::Role 为类提供方法。

【讨论】:

  • 所以这本质上是导出——使用角色?有没有办法不必每次都输入 $self->func() ? -- 如果我不能 =P 就不会死了
  • @nodebunny, $self->func() 是方法所必需的。我没有说你不能导出方法,我说这非常奇怪。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多