我可以在构造函数中使用访问器方法吗?

时间:2016-03-22 16:14:10

标签: perl oop constructor accessor

我正在编写一个处理时间和日期信息的简单Perl模块。下面是构造函数的简化版本和一个访问器方法:

VideoGame

我的问题是...... 在Perl的对象构造中使用访问器是否可以接受?

使用构造函数内部的访问器使得我不需要构造函数本身的所有验证代码,因为输入由访问者验证,但这是不好的做法吗?

我有什么理由不想这样做吗?

1 个答案:

答案 0 :(得分:2)

,你可以这样做。

但是从OOP的角度来看,将代码移动到init方法可能是有意义的,因此构造函数只能创建对象。它基本上是在您调用bless之后完成的。

sub new {
    my $class = shift;

    # Create an empty object
    my $self = bless {};

    # initialize the object
    $self->init(@_);

    return $self;
}

sub init {
    my ($self, %args) = @_;

    # Get input arguments
    my $second = exists $args{'second'} ? $args{'second'} : (localtime)[0];

    # Use the accessor to validate and populate object data
    $self->second($second);

    return;
}

您是否考虑过使用Moose?即使您希望坚持使用手动oop ,也可以使用Type::Tiny作为类型约束。