函数重载按返回类型

时间:2012-07-13 13:43:04

标签: perl

Perl是支持按返回类型重载函数的语言之一。

这方面的简单例子是wantarray()

CPAN中几乎没有很好的模块可以扩展这个wantarray()并为许多其他返回类型提供重载。这些模块是Contextual::ReturnWant。不幸的是,我无法使用这些模块,因为这两个模块都没有使用perl版本5.8.9的perl评论家(我无法升级这个perl版本)。

所以,我正在考虑像Contextual :: Return和Want一样编写我自己的模块,但是很少。我试图理解Contextual :: Return和Want模块代码,但我不是专家。

我只需要返回类型的函数重载BOOL,OBJREF,LIST,SCALAR。

请通过提供一些指导帮助我,我该如何开始。

1 个答案:

答案 0 :(得分:7)

Contextual::ReturnWant的方式使用Perl语法的模块几乎必然会违反Perl::Critic。在这种情况下,主要的违法行为偶尔会禁用strict并使用最小的子程序原型。

我个人认为这是一个愚蠢的规则,坚持所有代码都必须通过任意一组测试,没有例外,但我也认为任何代码的行为都有很大不同,具体取决于调用它的上下文可能设计糟糕,难以理解和维护。很少见到使用wantarray,因为Perl通常会做正确的事情而无需你解释。

我认为您可能遇到过一个看起来很有趣的模块,并希望以某种方式将其合并到您的代码中。你能通过展示一个需要进行全面的上下文检查的子程序的例子来改变主意吗?

相关问题