एक unwrap
विधि है, लेकिन जिस तरह से मुझे लगता है कि मुझे का उपयोग करना चाहिए, इसका उपयोग नहीं किया जाना चाहिए। ऐसा लगता है कि यह या तो स्टैंडअलोन दिनचर्या या एक अलग वर्ग में एक विधि होना चाहिए। मैं क्या खो रहा हूँ?पर्ल 6 की अनचाहे विधि रूटीन की विधि क्यों है?
ऐसा प्रतीत होता है कि यह परवाह नहीं करता है कि जब तक यहसही होता है तो Routine::WrapHandle
एक तर्क के रूप में सही हो जाता है। इस उदाहरण में, मैं wrap
एक सबरूटीन और वापस एक WrapHandle
मिलती है:
sub add-two-numbers ($n, $m) { $n + $m }
sub do-some-stuff ($n, $m, $o) {
add-two-numbers( $n max $m, $m max $o);
}
put do-some-stuff(5, 10, 15);
# now I want to look into do-some-stuff to see what it's
# passing
my $wraphandle = &add-two-numbers.wrap: {
say "Arguments were (@_[])";
callwith(|@_);
}
put do-some-stuff(5, 10, 15);
फिर, मैं एक अलग और असंबंधित दिनचर्या बना सकते हैं और उस पर unwrap
कॉल कर सकते हैं:
my &routine = sub { 1 };
&routine.unwrap($wraphandle);
put do-some-stuff(5, 10, 15);
invocant को unwrap
अनावश्यक लगता है। दरअसल, मैं इसे एक वर्ग पद्धति के रूप में कॉल कर सकते हैं और यह अभी भी काम करता है:
Routine.unwrap($wraphandle);
लेकिन, ऐसा लगता है यह या तो एक नियमित (के बाद से invocant कोई फर्क नहीं पड़ता) होना चाहिए:
unwrap($wraphandle); # doesn't exist
$wraphandle.unwrap; # but, this method doesn't exist in that class
तो, मैं इस बारे में क्या याद आ रही है:
या Routine::WrapHandle
कि चूंकि पर एक विधि व्यवहार का स्रोत है तरीका?
रैप दस्तावेज़ों ने उल्लेख किया कि [लपेटें निजी है] (https://docs.perl6.org/type/Routine), इसलिए मैं उस पथ से नीचे नहीं गया। यह वास्तव में 'routine :: WrapHandle' देता है, इसलिए यह भी ठीक करने के लिए कुछ है। –