簡體   English   中英

在“ new”中聲明的Perl Use變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM