繁体   English   中英

使用函数编程语言处理具有内部状态的外部库的最优雅方法是什么?

[英]What is the most elegant way to deal with an external library with internal state using a function programming language?

我目前正在玩Scala开发,但我需要与诸如box2d之类的库集成来处理物理。 问题是,这需要依赖于管理其自身状态的外部库。 您可以跟踪传递到box2d世界的物体。 总结一下有用的方面:

  • Box2d管理世界中的状态,并在每个滴答/步骤后修改它们
  • 您创建(使用FP)传递到此世界的实体
  • Box2d在内部修改这些实体的状态
  • 要跟踪对象,请保持对它们的引用
  • 您很可能希望使用正文中的信息来呈现您的代码,因此我认为跟踪该信息的唯一方法是跟踪可变集合中的所有引用。 它需要在所有帧中存活。

所以我的问题是:

如何以优雅的方式跟踪这些引用(用于函数式编程),以及如何在代码的其余部分中最小化它对纯度的影响?

像国家单子这样的东西在这里我不会帮助我

实际的方法是确定哪些不变量必须包含不必要的行为,而不泄漏事实有副作用,然后,一旦你有证据就是这种情况,将状态隐藏在“unsafePerformIO”中。

另一种方法是通过例如显式的“我已经初始化”令牌来揭示存在内部状态的事实,该令牌是不可伪造的,并且是不可分割的,以保证对底层资源的线性访问。

功能反应式编程是一个活跃的研究领域,尽管如果您不需要模拟因果关系,也可以在此处使用Reader Monad

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM