欢迎!请查看关于页面以了解更多这个网站的工作方式。
我将一个 JS 库移植到 Clojure(以及,潜在地 cljs),我在理解局部状态方面遇到麻烦。想象一下这样的场景:你通过 WebSocket 进行 RPC,服务器的响应依赖于它已经发送给你的内容。那么,你想要保留来自服务器的响应的本地缓存。
在面向对象的世界中,你期望将套接字和缓存封装起来,并提供一个接口,使库用户可以发送 RPC 并透明地处理缓存的填充和从缓存中提取结果。在 Clojure[-Script] 中,要想实现相同的做法,会是什么惯用方法?我会只需要返回一个映射,并期望我的函数将其作为第一个参数传入,返回更新后的状态以及 RPC 的结果吗?
是的,明确定义状态,将其作为参数传递。不要使用全局状态。也不要使用动态变量。不要假设特定的状态框架,如 Integrant 或 Component。
这种方式将为消费者提供最大的灵活性和简单性。
你在JavaScript中处理它的方式没有问题。这类似于任何有状态的转换器的工作方式。