[英]Perl object inside the same module
標題含糊不清,但我會解釋一下。
我有一個 Perl 腳本,它使用一個名為systemId
的模塊
我在腳本中創建了一個對象
my $id = systemId->new({_dom => "dev"});
我打算實例化一個類似於上面的對象,但在 systemId.pm 內。
我該怎么做?
我真的不能在網上搜索它,因為我不知道從什么開始搜索。
這可以像在腳本中那樣完成。 與如何將包和main::
放在同一個文件中類似,一旦定義了包文件中的類,就可以使用它。 查看代碼后的注釋。
文件播放.pm
package Play;
use warnings;
use strict;
sub new {
my $class = shift;
my $self = { _data => shift || 'default' };
bless $self, $class;
print "New object created.\n";
return $self;
}
sub data {
my $self = shift;
if (@_) { $self->{_data} = shift }
return $self->{_data};
}
print "Inside the package. Create object.\n";
my $obj = Play->new();
my $data = $obj->data();
print "data: $data\n";
print "\n";
1;
腳本
use warnings;
use strict;
use Play;
print "In main\n";
my $obj = Play->new(25);
print "data: " . $obj->data() . "\n";
運行腳本時打印輸出
Inside the package. Create object. New object created. data: default In main New object created. data: 25
一旦執行了bless
調用, $self
就是類Play
的對象。 來自祝福
祝福 REF,CLASSNAME
祝福REF
這個函數告訴 REF 引用的對象它現在是 CLASSNAME 包中的一個對象。 如果省略 CLASSNAME,則使用當前包。 [...]
由於我們在包中,它可以用作對象和調用它的方法。 來自perlobj
一旦我們祝福了
$self
引用的哈希,我們就可以開始調用它的方法。
這是指使用$self
hashref,它成為對象。
請注意,在創建對象時可能存在初始化問題,以及究竟要做什么以及如何重要的問題。
我忍不住問,你想用這個做什么?
就這么簡單:
my $id = systemId->new({_dom => "dev"});
您還可以使用...
my $id = __PACKAGE__->new({_dom => "dev"});
...但第一個更明顯。
可以在任何地方創建新的對象實例,包括包/類本身。
->new
函數通常是:
sub new {
my $class = shift;
my $self = bless {@_}, $class;
return $self;
}
該實例實際上是在類模塊本身中創建的(使用bless
)。 Perl 中的->new
沒有魔法,一些模塊也使用另一個名稱,請參閱DateTime
的->now
,它在內部執行->new(epoch => time)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.