以及如何访问构造函数内的哈希?
$point
您在构造函数 ( )中的hashref是对象。当你bless
引用时,你把它变成一个对象。
所以你现在可以这样做:
print $point->{year}; # from inside constructor
...
print $object->{year}; # after construction
但是访问对象的私有部分并不安全。我建议您为其创建访问器,而不是直接操作散列。例如
sub year {
my $self = shift; # this is now the object
if (@_) {
$self->{year} = $_[0];
}
return $self->{year};
}
...
print $object->year(1984);
print $object->year;
构造函数中覆盖的值有什么用?任何人都可以找到一个很好的例子,其中使用了构造函数中的默认值吗?
由于您在构造函数中提供了默认值,因此如果您在没有任何参数的情况下调用构造函数,则将使用这些默认值。
my $object = Exercises->new;
但是由于您@_
在最后添加到 hashref,如果您向构造函数提供参数(并且哈希键对应于默认值),它们将覆盖默认值。
我的理解是我不能在里面使用变量,因为它们是词法的。我对吗?
我不确定我是否真的理解你的问题。您可以在任何地方使用变量。只要它们在范围内,您就可以引用它们,或者如果需要,您可以将变量传递给构造函数或其他方法。
传入的变量@_
在您的子例程中。通常他们被分配给其他东西以提高可读性。例如
my $self = shift; # this shifts from @_ implicitly
my %args = @_; # for hash args
my ($year, $month, $day) = @_;
一些额外的提示
您可以通过以下方式查看整个数据结构:
use Data::Dumper;
print Dumper $object;
您可能不知道您还可以使用可以帮助您更快地创建类的模块。看看这些: