package Person;
sub new
{
my $class = shift;
my $self = {
_firstName => shift,
_lastName => shift,
_ssn => shift,
};
# Print all the values just for clarification.
print "First Name is $self->{_firstName}\n";
print "Last Name is $self->{_lastName}\n";
print "SSN is $self->{_ssn}\n";
bless $self, $class;
return $self;
}
Run Code Online (Sandbox Code Playgroud)
我从这个网站得到了上面的代码.
从Classes官方Perl站点:
Perl没有为类定义提供任何特殊语法.包只是一个包含变量和子例程的命名空间.
考虑到这一点,上面的代码来自Tutorial Point,这是在Perl中创建类时的最佳实践吗?
在其他OO语言中,当没有设置值时,你可以从构造函数内部抛出异常,在Perl中也可以这样做吗?
哪个是正确的祝福方式?
教程点中的代码执行此操作:
bless $self, $class;
Run Code Online (Sandbox Code Playgroud)
但是从perl文档:
my $self = bless {
path => $path,
data => $data,
}, $class;
return $self;
Run Code Online (Sandbox Code Playgroud)
Perl没有对象构造函数.new
就像任何其他方法一样,方法可以抛出异常.
bless
返回它的第一个参数,所以
bless($ref, $class);
return $ref;
Run Code Online (Sandbox Code Playgroud)
和
return bless($ref, $class);
Run Code Online (Sandbox Code Playgroud)
是等价的.两者都是正确的.
就个人而言,我首先创建对象,然后添加到它.这将在基类中的构造函数之间创建并行
sub new {
my ($class, ...) = @_;
my $self = bless({}, $class);
$self->{...} = ...;
return $self;
}
Run Code Online (Sandbox Code Playgroud)
和子类中的构造函数
sub new {
my ($class, ...) = @_;
my $self = $class->SUPER::new(...);
$self->{...} = ...;
return $self;
}
Run Code Online (Sandbox Code Playgroud)
但这只是我个人的偏好.
归档时间: |
|
查看次数: |
205 次 |
最近记录: |