在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社区内是一个非常宽松的概念。
答案 0 :(得分:1)
最新的一句话是不要滚动你自己的对象系统,而是使用Moose
或其中一个派生词。
Moose
会自动为您提供构造函数,您可以基于每个字段定义初始化。
答案 1 :(得分:1)
基本上,构造函数返回一个受祝福的对象,并且一个方法对该对象进行操作。一个简单的方法是查看第一个参数。它的名称是$class
还是$self
?
通常的做法是将构造函数的子例程调用为new
。这使得很容易弄明白。此外,通常的做法是在方法之前将构造函数放在包中。
在真正的Perl中,你没有任何强制执行任何此操作。我最喜欢的是inside-out classes,它们很受欢迎,因为您可以通过使用类作为参考而欺骗。这是Perl对私有方法的回答。对我而言,它使编程和调试无法完成并维护。
当然,最新的方法是不要自己滚动,而是使用Moose,鼠标或其中一种衍生物。穆斯您甚至可以使用Class::Struct,这与其他所有模块不同,它是标准的Perl模块。