2017-12-22 17 views
5

Iterableが必要なところでCoroutineを渡す方法がわかりません。Kotlin:シーケンス(コルーチン)をIterableとして渡す方法<T>

は、私は次の関数があるとします。

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

私はコルーチンを渡したい:

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

は、私はこれが動作するために??の代わりに置くことになってんですか?私はbuildIteratorbuildSequenceを試しましたが、どちらもうまく動作しません。

+1

キャスティング 'buildSequence {...} asIterableは()'は十分でなければなりません。 – yegodm

答えて

6

あなたはasIterable()を使用することができます。

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

iterate(seq) 
+0

ありがとうございます。なぜ私は標準のlibに 'buildIterable'がないのか分かりませんが、私は' buildSequence(builderAction).asIterable() 'として自分のutilsに追加しました。 –

関連する問題