perl6

2010-07-07 9 views
5

में सरणी या हैंश से विधियां कैसे बनाएं I वस्तु गतिशीलता में नई विधियां जोड़ने का प्रयास कर रहा हूं। अपेक्षा के अनुरूप है, जबकि निम्नलिखित अपेक्षा के अनुरूप काम नहीं होगाperl6

use SomeClass; 

my $obj = SomeClass.new; 
my $blah = 'ping'; 
my $coderef = method { say 'pong'; } 

$obj.^add_method($blah, $coderef); 

$obj.ping; 

इस प्रिंट "पौंग":

कोड काम करता है ठीक बाद

use SomeClass; 

my $obj = SomeClass.new; 
my %hash = one => 1, two => 2, three => 3; 

for %hash.kv -> $k, $v { 
    my $coderef = method { print $v; } 
    $obj.^add_method($k, $coderef); 
} 

$obj.one; 
$obj.two; 
$obj.three; 

प्रिंट होगा या तो 111 या 333 के

कोई भी बता सकता है कि मैं क्या खो रहा हूं या परिणाम जो मैं उम्मीद कर रहा था उससे भिन्न क्यों हैं?

उत्तर

8

राकुडो के पास कुछ समस्याएं थीं जो आकस्मिक रूप से लेक्सिकल चर को साझा कर रही थीं, जो आपकी समस्या का कारण बन सकती थीं (कोड संदर्भ $v से अधिक बंद हो गया है)। Rakudo की वर्तमान विकास संस्करण के साथ (और इस प्रकार अगली फिल्म में, और "Rakudo स्टार" रिलीज भी में), इस कोड काम करता है:

class SomeClass { }; 

my $obj = SomeClass.new; 
my %hash = one => 1, two => 2, three => 3; 

for %hash.kv -> $k, $v { 
    my $coderef = method { say $v; } 
    $obj.^add_method($k, $coderef); 
} 

$obj.one; 
$obj.two; 
$obj.three; 

आउटपुट:

1 
2 
3 

ध्यान दें कि के बीच खाली स्थान के विधि का नाम और कोष्ठक की अनुमति नहीं है।

+0

इस जानकारी के लिए धन्यवाद। मैंने नवीनतम मासिक रिलीज का उपयोग किया। –