我正在尝试在 F# 中创建一个简单的状态机,但无法让两个具有循环依赖关系的状态正常工作。
我有这个州工厂:
open System
let createState produceInput stateSwitchRule nextState =
let rec stateFunc() =
match produceInput() with
| x when x = stateSwitchRule -> printfn "%s" "Switching state"; nextState()
| _ -> printfn "%s" "Bad input. Try again"; stateFunc()
stateFunc
我用它来创建两个相互递归的状态:
let rec pongState() = createState Console.ReadLine "go to ping" pingState
and pingState = createState Console.ReadLine "go to pong" (pongState())
[<EntryPoint>]
let main argv =
pingState()
0
当调用pingState()
并输入“go to pong”时,状态切换为 pong。但是当调用输入“go to ping”时,会抛出空引用异常。
无论如何,选择的方法是否存在这个问题,或者我应该以不同的方式对其进行建模?