2017-02-16 8 views
-1

私はperlについて学び、OOPの古いコードを見直しています。 plでは、pmファイルに関数を呼び出す行が1行あります。機能、午後ファイルで

my $id = new ABC::Data::InstallData(); 
my $startMenu = $id->getData('menu'); 

よう は、以下のようなものです:

package ABC::Data::InstallData; 

$debug = 1; 
sub getData {        
    my($self, $tag) = @_;     
    #print "----1------$self-----------\n"; 
    #print "----2------$tag-----------\n"; 

    if ($debug && ! defined $self->{$tag}) { 
     $logger->debug("Undefined variable $tag = $self->{$tag}");  
    } 

    if ($debug) { 
     $logger->debug("Exiting ABC::Data::InstallData::getData");  
    } 
    return $self->{$tag};            
} 

あなたが見ることができるように、出力はクラス名とパラメータinputedできる2行の印刷があります。 しかし、私は理解していない$self->{$tag}意味、誰かが助けることができますか?

+0

あなたは何を理解していますか? '$ self'はオブジェクトであり、' $ tag'に対応するキーはオブジェクトのプロパティです。 –

答えて

0
$self->{tag} 

...この場合、クラス属性です。これは、クラス内のセッター/ゲッターメソッドのようです。ここで(冗長)この動作の例です:

sub new { 
    my ($class, $arg) = @_; 
    my $self = bless {}, $class; 
    $self->arg($arg); 
    return $self; 
} 
sub arg { 
    my ($self, $arg) = @_; 
    if (defined $arg){ 
     $self->{arg} = $arg; 
    } 
    return $self->{arg}; 
} 

その後、私はそのモジュールを使用する場合:

my $object = Blah->new(2); 
print $object->arg; 

# you can even access object attributes outside of the 
# documented accessor methods, but it breaks encapsulation, 
# so you just don't do it 

print $object->{arg}; 

出力:本質的には

2 

、返しgetData()サブルーチン値が​​の場合、$selfはクラスのオブジェクトであり(ハッシュリファレンスです)、tagはそのオブジェクトの属性です(ブレスハッシュリファレンス$self(オブジェクト))。パラメータを指定して呼び出すと、​​が設定され、返され、パラメータなしで呼び出されます。属性の設定は行われず、以前の(現在の)値が返されます。