[英]Perl Use Variable declared in 'new'
如果在Perl模塊中,我有一個“新”函數聲明:
my $self = $class->SUPER::new($pArgsProcessor, $pResponse, kStrFormatHtml);
$self->{mStrRunType} = $pArgsProcessor->readQueryString('runType');
$self->{mStrStartDate} = $pArgsProcessor->readQueryString('startdate');
$self->{mStrEndDate} = $pArgsProcessor->readQueryString('enddate');
bless $self, $class;
return $self;
有沒有辦法在另一個函數中使用存儲在“ $ self”中的數據? 我正在嘗試使用'mStrRunType'
$self
可能是一個對象,您包中的所有子對象都可以稱為方法。 然后:
my $object = Your::Class->new(...);
$object->foo(42);
在foo
方法中,該對象將是第一個參數:
sub foo {
my ($self, $meaning_of_life) = @_;
say "mStrEndDate = $self->{mStrEndDate}";
...;
}
筆記:
$self
。 如果編寫超類以支持繼承,則$class->SUPER::new(...)
可以確保將引用引用到正確的$class
。 您的命名方案建議您可能要使用更復雜的數據結構:
$self->{mStr} = { RunType => ..., StartDate => ..., EndDate => ..., };
您的構造函數看起來正確。 假設您的構造函數與此類似:
sub new {
my $class = shift;
my $pArgsProcessor, $pResponse, kStrFormatHtml; #shift your constructor params..
my $self = $class->SUPER::new($pArgsProcessor, $pResponse, kStrFormatHtml);
$self->{mStrRunType} = $pArgsProcessor->readQueryString('runType');
$self->{mStrStartDate} = $pArgsProcessor->readQueryString('startdate');
$self->{mStrEndDate} = $pArgsProcessor->readQueryString('enddate');
bless $self, $class;
return $self;
}
然后,您的方法應該可以使用您的參數:
sub test {
my $self = shift;
if (defined $self->{mStrEndDate}) {
print $self->{mStrEndDate};
} else {
print "not defined?";
}
}
如果您的鍵仍未定義,請確保$ pArgsProcessor方法返回定義的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.