2011-06-25 8 views

答えて

22

- >演算子(この場合、オブジェクト参照)の参照を呼び出し、それがSUPER方法なく、スーパーベースクラスを探しすることを意味します。

#!/usr/bin/perl -w 

package MyOBJ; 

use strict; 
use warnings; 

use Data::Dumper; 

sub new { 
    my ($class) = @_; 

    my $self = {}; 

    bless $self, $class; 

    return $self; 
} 

sub promote { 
    my ($self) = @_; 

    print Dumper($self); 

} 

1; 

package MyOBJ::Sub; 

use strict; 
use warnings; 

use base 'MyOBJ'; 

1; 

use strict; 
use warnings; 

my $obj = MyOBJ::Sub->new(); 

$obj->SUPER::promote(); 

実行それは、あなたが得られます:ここで

は、コードがそれを示すようになって

$VAR1 = bless({}, 'MyOBJ::Sub'); 

をご使用する最後の行を変更する場合 - >代わりにを::あなたは:

Can't locate object method "SUPER" via package "MyOBJ" at test.pl line 45. 

から彼 "はperldoc perlopを" マニュアル

矢印オペレーター

右側のいずれかである場合、 "[...]"、 "{...}"、又は「(...) "サブスクリプトの場合、左側はそれぞれ配列、ハッシュ、またはサブルーチンへのハードリファレンスまたはシンボリックリファレンスのいずれかでなければなりません。

これ以外の場合は、メソッド名またはメソッド名またはサブルーチン参照を含む単純なスカラ変数で、左側はオブジェクト(祝福された参照)またはクラス名(つまり、パッケージ名)

左側がオブジェクトrefまたはクラス名(SUPERは多態性のために定義された言語です)であるため、存在しないメソッドとして扱われるためエラーです。

+0

' - >'を使用すると、なぜメソッドを探すのですか?その根拠は何ですか? –

+0

私はperlのマニュアルからコピーした私の答えにいくつかの情報を追加しました。それがさらにあなたのためにそれを説明する希望。 –

関連する問題