了解科特林的屈服函数

问题描述 投票:14回答:2

我在Kotlin中看不到yield函数的明确定义。

上面链接中的示例并没有太多提及,但以下内容,

yield

但是以上示例并未指出收益的重要性。

  • 这是一个暂停功能是什么意思?
  • 在什么情况下可能是有利的?
kotlin yield kotlin-android-extensions kotlin-coroutines
2个回答
15
投票

您可以将val sequence = sequence { val start = 0 // yielding a single value yield(start) // yielding an iterable yieldAll(1..5 step 2) // yielding an infinite sequence yieldAll(generateSequence(8) { it * 3 }) } println(sequence.take(7).toList()) // [0, 1, 3, 5, 8, 24, 72] 视为“返回,下一次从您停止的位置开始:”]]

yield()

它创建状态机和内容,但是您可以将其转换为类似Java的内容:

val sequence = sequence {
    val start = 0
    yield(start) // first return
    yieldAll(1..5 step 2) // if called again, will start from here
    yieldAll(generateSequence(8) { it * 3 }) // if called more that six times, start from here
}

在Java类中,我们通过具有两个变量:class Seq { private AtomicInteger count = new AtomicInteger(0); private int state = 0; public int nextValue() { if (count.get() == 0) { return state; } else if (count.get() >= 1 && count.get() <= 5) { state += 2; return state; } else { state *= 3; return state; } } } count来维护显式状态。 statesequence的组合允许隐式维护此状态。


4
投票

让我们考虑一个示例,您可以在其中生成序列的下一个元素,但是看不到实现Java迭代器的简便方法。

© www.soinside.com 2019 - 2024. All rights reserved.