Håkon Hægland जैसा कि पहले ही, कहा यह कुछ आप क्या करना चाहिए रहे हैं नहीं है:
जंक्शनों बूलियन संदर्भ में matchers के रूप में इस्तेमाल किया जा के लिए होती हैं; जंक्शन का आत्मनिरीक्षण समर्थित नहीं है। यदि आप एक जंक्शन का आत्मनिरीक्षण करने का आग्रह महसूस करते हैं, तो इसके बजाय सेट या संबंधित प्रकार का उपयोग करें।
- docs.perl6.org/type/Junction
हालांकि, यह संभव है।
सबसे पहले, आप authothreading उपयोग कर सकते हैं (यानी एक जंक्शन की प्रत्येक शाखा जब एक समारोह है कि प्रकार Any
की एक बहस की उम्मीद के लिए पारित का स्वत: मूल्यांकन):
sub unjunc(Junction $j) {
gather -> Any $_ { .take }.($j);
}
दूसरे, आप हिम्मत में प्रहार कर सकते हैं और मैन्युअल रूप से मान एक्सट्रैक्ट:
sub unjunc(Junction $j) {
multi extract(Any $_) { .take }
multi extract(Junction $_) {
use nqp;
my $list := nqp::getattr($_, Junction, '$!storage');
my int $elems = nqp::elems($list);
loop (my int $i = 0; $i < $elems; $i = $i + 1) {
extract nqp::atpos($list, $i);
}
}
gather extract $j;
}
यदि आपका जंक्शन गैर पुनरावर्ती है (यानी अन्य जंक्शनों आप समतल करना चाहते हैं शामिल नहीं है), बाद दृष्टिकोण सरल किया जा सकता:
my $j := 1|2|3;
say nqp::p6bindattrinvres(nqp::create(List), List, '$!reified',
nqp::getattr($j, Junction, '$!storage'));
[प्रलेखन] के अनुसार (https://docs.perl6.org/type/Junction): * "जंक्शन का उपयोग बूलियन संदर्भ में मैचर्स के रूप में किया जाना है; जंक्शनों का आत्मनिरीक्षण समर्थित नहीं है। अगर आपको लगता है कि एक जंक्शन का आत्मनिरीक्षण करने का आग्रह करें, इसके बजाय सेट या संबंधित प्रकार का उपयोग करें। "* –