2016-05-12 12 views
5

मेरे पास एक ऐसा फ़ंक्शन है जो जनरेटर को वापस देता है। फिलहाल यह yield from उपयोग करता है:

function foo() 
{ 
    $generator = getGenerator(); 
    // some other stuff (no yields!) 
    yield from $generator; 
} 

अगर मैं की जगह है कि yield from एक सरल return साथ, कि इस मामले में कुछ भी बदल जाता है? शायद निष्पादन में? या प्रदर्शन? yield from एक नया 'बाहरी' इटरेटर बनाता है?

मुझे पता है, अन्य मामलों में yield from अधिक लचीला हो सकता है क्योंकि मैं इसे कई बार उपयोग कर सकता हूं और इसे सरल yield एस के साथ भी मिश्रण कर सकता हूं, हालांकि इससे मेरे मामले में कोई फर्क नहीं पड़ता।

उत्तर

2

जब आप ऊपर की तरह विधि के अंत में yield from का उपयोग करते हैं, तो यह विधि द्वारा लौटाए गए कार्यों के लिए चीजें नहीं बदलता है। लेकिन विधि के अंदर कोड के लिए अभी भी एक अंतर है: yield from से पहले किसी भी कोड को पुनरावृत्ति की शुरुआत में इटरेटर को रीवाइंड करते समय कहा जाता है, जबकि return से पहले कोड को फ़ंक्शन को कॉल करते समय निष्पादित किया जाता है, क्योंकि यह फ़ंक्शन केवल एक है सामान्य कार्य अब (वास्तव में, यह yield from के लिए विशिष्ट नहीं है। यह yield का व्यवहार है। सबूत के लिए https://3v4l.org/jnPvC देखें)।

yield from का बड़ा लाभ यह है कि आप इसे फ़ंक्शन में कई बार उपयोग कर सकते हैं, जो सभी इटरेटर के एकल मानकों में संयुक्त मानों को जोड़ता है।

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