Я пишу простой модуль Perl, который обрабатывает информацию о времени и дате. Ниже представлена упрощенная версия конструктора и один из методов доступа:Могу ли я использовать методы доступа в конструкторе?
package Time;
# Constructor
sub new {
my $class = shift;
my %args = @_;
# Create an empty object
my $self = bless {};
# 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 $self;
}
# Second accessor
sub second {
my $self = shift;
my $second = shift;
# Input validation
if (defined $second) {
if ($second =~ m{^\d+$} && $second >= 0 && $second <= 59) {
$self->{'second'} = $second;
}
else {
die "'second' must be an integer between 0 and 59!";
}
}
return $self->{'second'};
}
Мой вопрос ... Допустимо использовать аксессоры в строительстве объекта в Perl?
Использование аксессора внутри конструктора делает так, что мне не нужен весь код проверки в самом конструкторе, поскольку вход подтвержден аксессуаром, но является ли это неправильной практикой?
Есть ли причина, по которой я не хотел бы этого делать?
У Perl нет концепции конструктора. 'new' - это просто статический метод, как любой другой. – ikegami