我应该使用哪种方式?
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 :(得分:2)
就个人而言,我会选择第一种技术。创建一个有时从一个父级继承而有时从另一个父级继承的类对我来说似乎有点脏。肯定会工作,但它会使类分析工具(如Pod::Coverage::CountParents)混淆不清。
那就是说,我可能会将sub new
重命名为new_by_platform
。人们强烈期望My_Module->new
将返回My_Module
类型的对象。让它返回另一个类的对象可能会让人感到困惑。 (虽然如果My_Module::Win32
和My_Module::Linux
继承自My_Module
,那么将其命名为new
似乎不那么糟糕了。)
答案 1 :(得分:0)