2017-12-22 79 views
5

मुझे समझ में नहीं आता कि कोरटाइन को कैसे पास किया जाए जहां एक इटरबल की आवश्यकता होती है।कोटलिन: एक अनुक्रम (कोरआउट) को कैसे पार करना है Iterable <T>

मान लें मैं निम्नलिखित कार्य हो:

iterate(?? { 
    for (obj in objects) { 
     yield(transform(obj)) 
    } 
}) 

क्या मैं काम करने के लिए इस बात के लिए ?? के बजाय डाल करना चाहिए:

fun <T> iterate(iterable: Iterable<T>) { 
    for (obj in iterable) { 
     // do something.. 
    } 
} 

मैं चाहता हूँ एक coroutine पारित करने के लिए? मैंने buildIterator और buildSequence की कोशिश की लेकिन उनमें से कोई भी काम नहीं करता।

+1

'buildSequence {...} asIterable()' पर्याप्त होना चाहिए। – yegodm

उत्तर

6

आप asIterable() उपयोग कर सकते हैं:। कास्टिंग

val seq = buildSequence { 
    for (i in 1..5) { 
     yield(i) 
    } 
}.asIterable() 

iterate(seq) 
+0

धन्यवाद। हालांकि मुझे समझ में नहीं आता कि मानक lib में 'buildIterable' क्यों नहीं है .. मैंने इसे अपने utils में 'buildSequence (builderAction) के रूप में जोड़ा है .asIterable()' –

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