c# - 直接返回调用者的调用者并在下次调用时恢复状态

标签 c# lua continuations nlua

我正在为系统构建插件。我的插件的 update() 方法偶尔会被系统调用。

在我的插件的 update() 方法中,我正在修改系统状态,但是系统状态只有在系统有机会这样做时才会更新(这发生在调用update 方法)。

因此,每当我执行系统更新方法时,我都必须从 update() 中一路返回,让它返回,然后重新进入,然后我将拥有试图回到我原来的位置。我一直在考虑一种更聪明的方法来做到这一点,即通过保存调用框架等。然后在返回时加载该调用框架。

但我没有开始自己实现,而是在考虑是否已经有办法做到这一点。我正在编写的插件是通过 C# 的 NLua 库在 Lua 中编写的。

如果需要,我可以访问 C# 环境!

我有一个想法,我需要像延续这样的东西吗?

我想要的例子;

update() --> ... --> helper_function() --> system_state_modifier()
// System state modifier changes system state, saves the current stack/registers,
// whatever else is needed, and returns directly to update()'s caller
// On the next call to update, the previous stack/registers and such
// is restored, and continued.

最佳答案

我确实在寻找协程,它们似乎完全符合我的要求。 我最终将我的 update() 包装在一个方法中,以将实际更新功能作为协程运行,并使用 coroutine.yield()

包装我所有的系统状态更改方法

关于c# - 直接返回调用者的调用者并在下次调用时恢复状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22070805/

相关文章:

c# - 使用私有(private)构造函数实例化内部类

web-applications - Haxe 与 Lua 构建大流量 Web 应用程序

c++ - Lua 用户数据指针的生命周期

functional-programming - 延续单子(monad)?

user-interface - 使用 Scala 分隔延续进行 GUI 编程的示例

c# - 仅使用一个元素传递 IEnumerable 与传递元素本身的成本

c# - 使用 LINQ 获取接口(interface)类型 [] 上的所有方法?

lua - 将所有内容保存在单个 lua 字节码 block 中?

haskell - 如何让 callCC 更有活力?

c# - 哪个类在其构造函数中调用 SuppressFinalize 以致于您的 dispose 调用无用?