2012-07-13 93 views
2

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

简单的例子是wantarray()

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

所以,我正在考虑编写自己的模块,如Contextual :: Return和Want,但使用非常少。我尝试了解Contextual :: Return和Want模块代码,但我不是专家。

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

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

+1

我不知道,CPAN说你的perl版本应该适用于Contextual :: Return ...无论如何,提供一个额外的参数(context =>'BOOL')可能比简化一个额外的模块 – amon 2012-07-13 13:54:28

+0

If你的Perl :: Critic不喜欢它,为什么你不添加一条规则,以便它知道如何正确处理这些情况? – simbabque 2012-07-13 13:59:44

+0

这些规则由我们的客户执行。这是政策,cpan模块也应该通过perl批评严重性5,如果使用 – rpg 2012-07-13 14:03:49

回答

7

Contextual::ReturnWant的方式玩Perl语法的模块几乎肯定会落入Perl::Critic的范围。在这种情况下,主要违规行为偶尔会禁用strict并使用最小程度的子程序原型。

我个人认为这是一个愚蠢的规则,坚持所有的代码都必须通过任意的测试,没有例外,但我也认为任何代码的行为非常不同,取决于它所调用的上下文设计不好,难以理解和维护。即使使用wantarray也很少见,因为Perl通常会在没有解释的情况下正确使用

我想你可能遇到了一个看起来很有趣的模块,并且想要以某种方式将它合并到你的代码中。您是否可以通过显示需要您描述的全面上下文检查的子例程来更改我的想法?

+1

+1,甚至没有写的代码加倍。 'Perl :: Critic'并不是代码质量的全部和最终全部;作为一个广泛使用的Perl模块应该是绰绰有余的。 – duskwuff 2012-07-13 15:30:20

+0

@duskwuff:但问题一如既往,很可能会说服管理层,因为他们知道自己已经执行了任何标准,并且在必要时可以在防御中表达自己的意见。 – Borodin 2012-07-13 15:38:14

+0

可靠的反驳可能是许多重要的Perl核心模块也失败了。 (例如'CGI.pm'有八个失败,'Moose.pm'有一个,但没有人会争辩说你应该推出你自己的CGI模块,或者避开Moose。) – duskwuff 2012-07-13 16:31:49