在Perl OOP中,是否有关于构造函数内初始化的官方建议?

时间:2014-04-09 23:48:38

标签: perl oop

在Perl面向对象编程中,是否有任何关于在" new"中分离或包含初始化的官方[1]建议?构造

我正在寻求Perl最佳实践或类似的参考。

例如,是否存在以下分拆或组合形式的官方建议:

sub new {
   my ( $obj_or_class ) = @_;

   my $class = ( ref $obj_or_class ) ? ref $obj_or_class : $obj_or_class;
   my $self = bless {}, $class;
   return $self;
} ## end sub new

sub init {
   my ( $self, $arg ) = @_;
      foreach my $key (@VALID_KEYS) {
       if ( exists $arg->{$key} ) {
           $self->{$key} = $arg->{$key};
       }
   }
   return;
} ## end sub _init

[1]我意识到"官方"在Perl社区内是一个非常宽松的概念。

2 个答案:

答案 0 :(得分:1)

最新的一句话是不要滚动你自己的对象系统,而是使用Moose或其中一个派生词。

Moose会自动为您提供构造函数,您可以基于每个字段定义初始化。

答案 1 :(得分:1)

基本上,构造函数返回一个受祝福的对象,并且一个方法对该对象进行操作。一个简单的方法是查看第一个参数。它的名称是$class还是$self

通常的做法是将构造函数的子例程调用为new。这使得很容易弄明白。此外,通常的做法是在方法之前将构造函数放在包中。

在真正的Perl中,你没有任何强制执行任何此操作。我最喜欢的是inside-out classes,它们很受欢迎,因为您可以通过使用类作为参考而欺骗。这是Perl对私有方法的回答。对我而言,它使编程和调试无法完成并维护。

当然,最新的方法是不要自己滚动,而是使用Moose,鼠标或其中一种衍生物。穆斯您甚至可以使用Class::Struct,这与其他所有模块不同,它是标准的Perl模块。