代码之家  ›  专栏  ›  技术社区  ›  sid_com

为条件OO模块加载编写包装器模块的正确方法是什么?

  •  2
  • sid_com  · 技术社区  · 11 年前

    我应该用哪种方式?

    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';
    
    2 回复  |  直到 11 年前
        1
  •  2
  •   tobyink    11 年前

    就我个人而言,我会采用第一种技术。创建一个有时从一个父类继承,有时从另一个父级继承的类,我觉得有点脏 工作 当然,但它会混淆类分析工具(如 Pod::Coverage::CountParents )没有尽头。

    也就是说,我可能会重新命名 sub new 像这样 new_by_platform 。人们强烈期望 My_Module->new 将返回类型为的对象 My_Module 。让它返回另一类的对象可能会使人困惑。(尽管如果 My_Module::Win32 My_Module::Linux 继承自 我的模块(_M) ,然后命名 new 似乎没那么糟糕。)

        2
  •  0
  •   Community CDub    4 年前