2014-02-18 50 views
2

我應該使用哪種方式?寫入用於條件OO模塊加載的封裝模塊的正確方法是什麼?

package My_Module; 

# way one 
my $package = $^O eq 'MSWin32' ? 'My_Module::Win32' : 'My_Module::Linux'; 
sub new { 
    my $class = shift; 
    return $package->new(@_); 
} 

# way two 
use parent $^O eq 'MSWin32' ? 'My_Module::Win32' : 'My_Module::Linux'; 
+0

都不是。 My_Module對象應該包含一個My_Module :: Win32或My_Module :: Linux對象。 – ikegami

回答

2

個人而言,我會用第一種方法去。創建一個有時繼承父類,有時繼承另一個類的類,對我來說似乎有點骯髒。它肯定會工作,但它會混淆類分析工具(如Pod::Coverage::CountParents)沒有結束。

也就是說,我可能會將sub new重命名爲new_by_platform之類的東西。有強烈的期望My_Module->new將返回My_Module類型的對象。讓它返回另一個類的對象可能會讓人困惑。 (雖然如果My_Module::Win32My_Module::Linux繼承自My_Module,那麼命名它new好像不那麼糟糕。)

相關問題