首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重写Moose类的导入方法

重写Moose类的导入方法
EN

Stack Overflow用户
提问于 2013-12-19 21:37:19
回答 1查看 215关注 0票数 1

我有两个Perl类。让我们调用一个Client,另一个ServerServer是一个定义良好的Moose类。Client不是一个Moose类,它只是一个非常薄的外观,可以通过网络连接到Server对象。

此外,Client是我们项目的内部,不应该被其他任何人使用。现在在我们公司,其他的开发人员并不总是值得信任的。为了帮助他们知道他们做错了什么,我们的Client类有一个自定义导入语句:

代码语言:javascript
复制
package Client;

sub import {
    my ($self, $promise) = @_;
    die "this is not a public API"
        unless $promise eq "Only CertainTeam should be using this API";
}

sub do_something { ... }

因此,为了让某人使用Client,他们必须键入:

代码语言:javascript
复制
use Client q{Only CertainTeam should be using this API};

我不确定这是否是最好的方法,但它很好地阻止了其他团队使用Client。现在我想让Client成为一个驼鹿类。但是,当我添加use Moose;时,perl非常不高兴,因为我现在正在覆盖Moose的导入。我得到以下错误:

代码语言:javascript
复制
Prototype mismatch: sub Client::with: none vs (&;$) at Client.pm line 14

有人对我如何坚持Client的导入行为,同时使它成为一个Moose类有任何想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-19 22:13:24

此错误消息与import方法无关。您没有覆盖Moose已安装到类中的import方法,因为Moose没有在类中安装任何此类方法。

这是因为Moose导出了一个名为with的函数,但是您的包已经包含了一个名为with的函数。据猜测,您正在使用古老的Error.pm进行异常处理;这将导出一个名为with的函数。这是一个已知不相容

我的建议:

  • Error.pm不再是它的维护人员推荐的。若要尝试/捕捉,请切换到尝试::微型
  • 错误::用于异常的简单基类是与Error.pm相同发行版的一部分。考虑切换到可抛::错误
  • 这个import方法似乎是一个非常奇怪的安全性尝试。把Client类重命名为CertainTeam::Internal::Client怎么样?虽然这并不能阻止其他人使用它,但是任何在代码中乱扔引用显然是另一个团队内部客户端的人都在制造麻烦。他们得到的唯一保证是,如果他们的代码中断,他们可以保留这两部分。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20692173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档