2012-07-13 91 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