loop

inline suspend fun <S : Stage<S>> StageLoop<S>.loop(crossinline condition: (next: S?) -> Boolean = { next -> next != null }, crossinline exceptionHandle: (Throwable) -> Unit = { e -> throw e })(source)

通过提供的 StageLoop 进行循环。

Parameters

condition

每次循环时的条件判断。默认为 next != null。 可以配合其他条件实现声明周期控制,例如 Job

val job: Job = ...
stageLoop.loop(condition = { next -> job.isActive && next != null })
exceptionHandle

每个阶段循环到并执行时的异常处理器


inline suspend fun <S : State<S>> S.loop(onEach: (S) -> Boolean = { true }, onNext: (S?) -> S? = { it }): S(source)

通过指定的 State 开启状态循环并直到状态消失。

Return

当循环结束时的最后一个有效状态,如果没有任何新的状态产生则得到 receiver 自身。

Author

ForteScarlet

Parameters

onEach

每一次循环的状态控制,如果手动中断则 loop 的返回值即为此函数用于判断的参数值。

var state = ...
while(onEach(state)) {
...
}

return state

默认永远为 true

onNext

对中间每一次的新状态拦截处理,默认返回被拦截的结果自身。