2009-02-12 15 views
8

मेरे पास मेरी कक्षा में निम्न कोड है:मैं पर्ल में कॉलबैक के रूप में कोड रेफरी का उपयोग कैसे कर सकता हूं?

 
sub new { 
    my $class = shift; 
    my %args = @_; 
    my $self = {}; 
    bless($self, $class); 
    if (exists $args{callback}) { 
     $self->{callback} = $args{callback}; 
    } 
    if (exists $args{dir}) { 
     $self->{dir} = $args{dir}; 
    } 
    return $self; 
} 

sub test { 
    my $self = shift; 
    my $arg = shift; 
    &$self->{callback}($arg); 
} 

और निम्न कोड वाला एक स्क्रिप्ट:

 
use strict; 
use warnings; 
use MyPackage; 

my $callback = sub { 
    my $arg = shift; 
    print $arg; 
}; 

my $obj = MyPackage->new(callback => $callback); 

लेकिन मुझे निम्न त्रुटि प्राप्त होती है:

Not a CODE reference ... 

मुझे क्या याद आ रही है ? प्रिंटिंग ref($self->{callback})CODE दिखाता है। यह काम करता है अगर मैं $self->{callback}->($arg) का उपयोग करता हूं, लेकिन मैं कोड रेफरी का आविष्कार करने का एक और तरीका उपयोग करना चाहता हूं।

+1

आप एक कोड रेफरी को कम करने का दूसरा तरीका क्यों चाहते हैं? क्या काम करता है और अगली समस्या पर आगे बढ़ें। :) –

उत्तर

18

एम्परसैंड केवल $self पर बाध्यकारी है और पूरी बात नहीं है। आप बात यह है कि संदर्भ देता है चारों ओर curlies कर सकते हैं:

&{$self->{callback}}($arg); 

लेकिन

$self->{callback}->($arg); 

आम तौर पर क्लीनर माना जाता है, क्यों नहीं आप इसका इस्तेमाल करना चाहते हैं?

+0

मेरा perl थोड़े जंगली है। मुझे पता था कि मैं कुछ खो रहा था, और मैं यह जानना चाहता था कि वह क्या था :)। धन्यवाद एडम! – Geo

संबंधित मुद्दे

 संबंधित मुद्दे