在Perl中,可以很容易地保佑hashref
,並用它來存儲和讀取性能:如何處理基於SCALAR的Perl類的屬性?
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
或$obj->property($x)
之類的東西,並且可以獨立於同一類的其他實例。這些屬性在哪裏存儲?我知道真的取決於類的底層實現,它在做什麼或者它在與什麼交互,並且可以實際上多次回答問題(例如,對象只是與另一個對象或某個連接進行連接並只向它發送或查詢值)。但是,如果有一種基於標量的對象存儲屬性的方法(比如在Perl中的類結構的不同概念或方法中),我真的很想知道它。
在此先感謝您的任何意見! :-)
你能舉出任何這樣的模塊的例子嗎? – Borodin
我真的沒有跟蹤,這只是讓我每次看到它都會越來越好奇,這實際上只是那些我真正嘗試轉儲對象以查看某些值的時間。我現在想到的一個例子是GD。創建一個'新的GD :: Image'然後轉儲它。 –
GD :: Image是一個基於XS的類的例子,因爲它是一個Perl綁定到[libgd](http://www.libgd.org/)。 – cjm