在Perl中,很容易保佑hashref并使用它来存储和读取属性:
package MyPackage;
use strict;
use warnings;
sub new {
bless {}, __PACKAGE__;
}
sub SomeProperty {
my $self = shift;
if (@_) {
return $self->{SomeProperty} = shift;
}
$self->{SomeProperty};
}
# Or even like this to be able to call $obj->OtherProperty = $x;
sub OtherProperty : lvalue {
my $self = shift;
$self->{OtherProperty};
}
Run Code Online (Sandbox Code Playgroud)
但是,我已经看到一些类(来自不同的Perl模块),当转储时,显示一个简单的标量祝福:
$obj = bless( \$8756489, 'Some::Package' );
Run Code Online (Sandbox Code Playgroud)
然而,他们有方法和属性.我理解的方法,can当询问祝福时,将调用包调用的任何子例程$object->name.我不理解的部分是它们如何存储属性.这些物业存放在哪里?
有几次他们接受类似的东西$obj->property = $x,$obj->property($x)并且可以独立于同一类的其他实例.这些物业存放在哪里?
我知道这实际上取决于类的底层实现,它正在做什么或它正在与之交互,并且实际上可以多次回答这个问题(例如,对象只是在某个地方与另一个对象或连接接口,只发送或向它求价值).
但是,如果有一个标量基于对象存储的属性(如在一个不同的概念或方法在Perl类结构)的方式,我真的很想知道.
提前感谢您的任何意见!:-)