我认为这个问题涉及同一领域,但我看不出它如何适用于我的情况. 来自代理/邮箱处理器的通用回复?
这是背景.我有一些状态,现在我只想说它只包含一个玩家列表.可能会有更多,例如游戏等.我也有一个没有玩家的initialState.
type Player = {Name: string; Points: int}
type State = {Players: Player list}
let initialState = {Players = []}
Run Code Online (Sandbox Code Playgroud)
我有两种需要处理的"消息".查询,是将状态映射到某个值但不更改状态的函数.例如,返回显示最高得分的int.
和生成新状态的命令,但可以返回值.例如,将新玩家添加到集合中,并返回id或其他内容.
type Message<'T> =
| Query of (State -> 'T)
| Command of (State -> 'T * State)
Run Code Online (Sandbox Code Playgroud)
然后我们有一个可以响应消息的模型.但不幸的是,它使用了一个可变状态,我更喜欢使用MailboxProcessor和消息循环.
type Model(state: State) =
let mutable currentState = state
let HandleMessage (m: Message<'outp>) =
match m with
| Query q -> q currentState
| Command c ->
let n, s = c currentState
currentState <- s
n
member …Run Code Online (Sandbox Code Playgroud) f# ×1