State

abstract class State<S : State<S>>(source)

一个单向流转可挂起的 "状态机"

状态 State 是一个简易且状态单一单向的 "状态机" 。 与 StageLoop 类似,但是与其不同的是 State 没有外置的循环器, 也没有内置的队列,仅使用其本身循环。

建议通过抽象或密封类提供类型约束并参考如下使用:

sealed class MyState : State<MyState>() {

/** 一个用于启动状态循环的状态 */
object Start : MyState() {
override suspend fun invoke(): MyState = Process(0)
}

/** 中间的处理状态,可以直接隐藏 */
private data class Process(val value: Int) : MyState() {
override suspend fun invoke(): MyState? {
return if (value < 10) Process(value + 1) else End
}
}

/** 最后一个状态,会被 `State.loop()` 返回 */
data class End(val value: Int): MyState() {
override suspend fun invoke(): MyState? = null
}
}

val myState: MyState = ...

val lastState = myState.loop() // 开始循环直到结束

Author

ForteScarlet

See also

Constructors

Link copied to clipboard
constructor()

Functions

Link copied to clipboard
abstract suspend operator fun invoke(): S?

执行当前状态的逻辑,并返回下一个要进入的状态。