gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:28:40 25 4
gpt4 key购买 nike

我正在编写一个简单的 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 的对象构造中使用访问器是否可以接受?

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

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

最佳答案

是的,你可以做到。

但是从 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 ?您也可以使用 Type::Tiny对于您的类型限制,即使您想坚持使用手动 oop

关于perl - 我可以在构造函数中使用访问器方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36159668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com