मैं कैसे एक समारोह, a
, कार्य करने के लिए, b
, और पर्ल में b
कॉल a
है पारित करते हैं?एक समारोह वस्तु पासिंग और यह कॉलिंग
उत्तर
यहां एक पूर्ण, काम करने वाली स्क्रिप्ट है जो दर्शाती है कि आप क्या पूछ रहे हैं।
sub a { print "Hello World!\n"; }
sub b {
my $func = $_[0];
$func->();
}
b(\&a);
यहाँ व्याख्या दी गई है: यदि आप \&a
कह कर a
कार्य करने के लिए एक संदर्भ ले। उस बिंदु पर आपके पास एक फ़ंक्शन संदर्भ है; जबकि सामान्य रूप से एक समारोह func()
कह कर कहा जा सकता है कि आप के रूप में अच्छी $func->()
अन्य संदर्भों के साथ ->
वाक्य रचना सौदा कह कर एक समारोह संदर्भ कहते हैं। उदाहरण के लिए, यहाँ सरणी और हैश संदर्भ से निपटने का एक उदाहरण है:
sub f {
my ($aref, $href) = @_;
print "Here's an array reference: $aref->[0]\n"; # prints 5
print "Here's a hash ref: $href->{hello}\n"; # prints "world"
}
my @a = (5, 6, 7);
my %h = (hello=>"world", goodbye=>"girl");
f(\@a, \%h);
आप पर्ल में \&my_method
के रूप में सबरूटीन्स संदर्भ का उपयोग कर सकते हैं, और $myref->();
साथ उन लोगों के संदर्भ कहते हैं। इसे आज़माएं:
perl -e'sub a { print "foo in a"; }; sub b { shift->(); }; b(\&a);'
शुभकामनाएँ!
क्या होगा अगर मैं functi गुजर रहा था एक हैश के हिस्से के रूप में, तो यह ऐसा दिखाई देगा? $ Args {समारोह} ->(); – Kys
एली Courtwright के उदाहरण के लिए ऊपर के बाद: आप केवल एक बार पहले समारोह का उपयोग करते हैं, तो आप भी एक गुमनाम समारोह के साथ b
कह सकते हैं, इस तरह:
b(sub { print "Hello World\n"; });
आप किसी अन्य कार्य करने के लिए एक समारोह पारित नहीं हो सकता सीधे। इसके बजाय, आप एक समारोह में संदर्भ पास करते हैं। फ़ंक्शन को कॉल करने के लिए आप इसे ->()
का उपयोग करके (कोड कोड रेफरी) के रूप में अस्वीकार करते हैं;
sub a { print @_ }
sub b {
my $f = shift; # assuming that $f is a function reference...
$f->(@_); # call it with the remaining arguments
}
b(\&a, "hello, world!"); # prints "hello, world!"
पर्ल पास-दर-नाम अर्थ विज्ञान नहीं है, लेकिन आप एक हैश का उपयोग कर उन्हें अनुकरण कर सकते हैं। फ़ंक्शन को कॉल करने का तरीका वही है। आप इसे अस्वीकार करते हैं।
sub a { print @_ }
sub b {
my %arg = @_;
$arg{function}->(@{$arg{arguments}});
}
b(function => \&a, arguments => ["hello, world!"]);
ObPerl6: पर्ल 6 पास-बाय-नाम अर्थशास्त्र होगा।
- 1. कॉलिंग चर एक और समारोह
- 2. jQuery पासिंग $ (इस) एक समारोह
- 3. पासिंग वस्तु विधि()
- 4. पासिंग सी Cython समारोह
- 5. वस्तु और समारोह
- 6. कॉलिंग @JSFunction: वस्तु
- 7. 'स्थिर' एक समारोह में वस्तु
- 8. एक और समारोह
- 9. कॉलिंग आधार वर्ग अधिरोहित समारोह
- 10. सी ++ नौसिखिया: एक समारोह के लिए एक fstream पासिंग डेटा
- 11. समारोह वस्तु आवश्यक
- 12. सी ++ समारोह वस्तु
- 13. सी # तर्क के रूप में पासिंग समारोह
- 14. टाइपप्रति समारोह तीर वस्तु
- 15. Node.js express.js वस्तु एक समारोह call_non_function
- 16. एक और समारोह
- 17. ASP.NET: एक पृष्ठ में masterpage से एक समारोह कॉलिंग UserControl
- 18. गतिशीलता 2011 में एक संवाद कॉलिंग और यह
- 19. एक सी ++ सदस्य समारोह सूचक कॉलिंग: इस-सूचक भ्रष्ट
- 20. कॉलिंग हास्केल FFI समारोह Ptrs सी
- 21. कॉलिंग समारोह .load (JQuery) के बाद
- 22. कॉलिंग सी ++ एक struct
- 23. एक खिड़कियों कॉलिंग एक और धागा (नेट)
- 24. एक और जावास्क्रिप्ट वस्तु
- 25. समारोह संकेत दिए गए और एक समारोह
- 26. एक निर्माता के सभी तर्क पासिंग
- 27. मैं एक समारोह सूचक द्वारा परिभाषित किया गया है एक सी ++ एक विशिष्ट वस्तु दृष्टान्त
- 28. एक सबरूटीन के लिए एक वर्कशीट पासिंग
- 29. डीबी पर वस्तु भंडारण और यह
- 30. समारोह पैरामीटर के रूप में चर प्रकार पासिंग
क्या होगा यदि मैं हैश के हिस्से के रूप में फ़ंक्शन को पास कर रहा था, तो क्या यह ऐसा दिखाई देगा? $ args {function} ->(); – Kys
मैंने सरणी और हैश संदर्भों के लिए उदाहरण जोड़े हैं। च (समारोह => \ &func); तो समारोह, च में, यह इस होगा उप च { $ args {समारोह} ->();} –
लेकिन क्या होगा अगर यह इस था? : हां, '->()' एक कोड संदर्भ को संदर्भित करता है और इसे कॉल करता है। फ़ंक्शन के लिए तर्क माता-पिता के बीच जाते हैं, जैसा कि आप उम्मीद करेंगे। – Kys