在 Perl 中,很容易 bless ahashref
并使用它来存储和读取属性:
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};
}
但是,我见过一些类(来自不同的 Perl 模块),当它们被转储时,会显示一个简单的标量祝福:
$obj = bless( \$8756489, 'Some::Package' );
然而,它们有方法和属性。我理解的方法,任何子程序包can
调用然后将在询问祝福时被调用$object->name
。我不明白的部分是他们如何存储属性。这些属性存储在哪里?
有几次他们接受类似$obj->property = $x
or的东西,$obj->property($x)
并且可以独立于同一类的其他实例。这些属性存储在哪里?
我知道这真的取决于类的底层实现,它在做什么或它正在与什么交互,并且实际上可以多次回答这个问题(例如,对象只是在某个地方与另一个对象或连接进行交互,并且只发送或查询它的值)。
但是,如果有一种方法可以让基于标量的对象存储属性(例如在 Perl 中以不同的概念或方法来处理类结构),我真的很想知道它。
提前感谢您的任何评论!:-)