我有一个不可变的State,我处理一个消息队列,其中每个消息是状态中某些字段的新值列表.
新值可能适用于字段的一部分 - 例如,设置或清除多个标志中的一个标志(位),或仅更改16位字段的低或高8位部分.
在处理完消息之后,我希望获得状态的不可变副本,并应用修改.
object StateField {
sealed abstract class StateField()
sealed abstract class Register extends StateField
sealed abstract class Flag extends StateField
case object AX extends Register
case object AH extends Register
case object AL extends Register
case object CF extends Flag
case object OF extends Flag
}
class StateFieldModification(field: StateField, value: Int)
class ModificationMessage(content: List[StateFieldModification])
case class State(AX: Int, Flags: Int) {
def readRegister(field: StateField.Register): Int = field match {
case StateField.AX => this.AX
case …Run Code Online (Sandbox Code Playgroud)