2011-06-25 16 views

cevap

22

sayılı -> operatör (bu durumda, bir amacı referansı), bir referans arama anlamına gelir ve SÜPERyöntem değil, süper temel sınıf arayacaktır.

#!/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(); 

Run o elde edersiniz: Burada

kod bunu göstermektir

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

Eğer kullanmak son satırı değiştirdiğinizde -> yerine :: alırsınız:

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

t o "perldoc perlop" el

Ok Operatör

sağ taraf ya ise bir "[...]", "{...}" veya "(...) "alt simge, daha sonra sol taraf, sırasıyla bir dizi, karma veya bir alt yordam için sabit veya sembolik bir başvuru olmalıdır.

Aksi takdirde, sağ taraf, yöntem adı veya alt yordam başvurusu içeren bir yöntem adı veya basit bir skaler değişkendir ve sol taraf bir nesne (kutsanmış bir başvuru) veya bir sınıf adı olmalıdır. bir paket adı)

sol tarafında bir nesne ref veya sınıf adı ne (süper polimorfizmi için bir dil tanımlandığı bareword olan) olduğu için, var olmayan bir yöntem, dolayısıyla hata olarak değerlendirilir.

+0

niçin '->' yöntemini kullanırken bu yöntemi arar? –

+0

Perl kılavuzundan kopyalanan cevabım için daha fazla bilgi ekledim. Umarım bunu sizin için daha da açıklar. –