【发布时间】:2016-10-20 20:20:05
【问题描述】:
我有一个简单的游戏循环实现
let gameLoop gamestate =
let rec innerLoop prev gamestate =
let now = getTicks()
let delta = now - prev
gamestate
|> readInput delta
|> update delta
|> render delta
|> innerLoop delta
innerLoop 0L gamestate
此实现会引发 stackoverflow 异常。在我看来,这应该是尾递归的。我可以像这样解决问题
let gameLoop gamestate =
let rec innerLoop prev gamestate =
let now = getTicks()
let delta = now - prev
let newState = gamestate
|> readInput delta
|> update delta
|> render delta
innerLoop now newState
innerLoop 0L gamestate
所以我的问题是为什么第一个代码示例会引发 stackoverflow 异常。
【问题讨论】:
-
你在哪个平台上运行?
-
澄清一下:您发布的变通版本是否可以正常工作?
-
@FyodorSoikin 我使用 fsi 版本 14.0.23413.0 在 Windows 10 上运行
-
@Peter 是的,我的解决方法是有效的。
-
This question 可能在这里感兴趣。无论如何,如果错误发生在调试或发布编译中,以及是否附加调试器是否重要,这可能会很有趣。
标签: f# tail-recursion