gpt4 book ai didi

rust - 如何在库中实现长期变量/状态?

转载 作者:行者123 更新时间:2023-11-29 08:02:43 24 4
gpt4 key购买 nike

我知道在 Rust 中实现类似全局/实例/模块变量的首选方法是在 main() 或其他常见入口点中创建所述变量,然后将其传递给任何人需要它。似乎也可以将 lazy_static 用于不可变变量,或者它可以与 mutex 结合以实现可变变量。

在我的例子中,我使用 Rust 创建一个绑定(bind)到 Python 的 .so,我需要在 Rust 库中存储大量可变状态(以响应 Python 应用程序调用的许多不同函数调用) .

存储该状态的首选方式是什么?

是否只能通过可变的 lazy_static 方法,因为我没有 main() (或者更一般地说,任何在 Python 的函数调用之间不终止的函数),或者还有其他方法吗?

最佳答案

捆绑

一般来说,在没有其他要求的情况下,答案是将您的状态捆绑在一些对象中并将其交给客户端。一个流行的名称是 Context

然后,客户端应该必须在每个需要它的函数调用中传递对象:

  • 通过将功能定义为对象的方法。
  • 或者要求对象作为函数/方法的参数。

这给了客户端完全控制权。

客户端可能最终会为其创建一个全局变量,或者实际上可能会欣赏能够兼顾多个实例的灵 active 。

注意:不需要提供对对象内部状态的任何访问;所有客户端需要的是一个句柄(引用计数,在 Python 中)来控制生命周期并决定何时使用哪个句柄。在 C 中,这将是一个 void*


异常(exception)情况

有些情况下,例如缓存,功能不会受到影响,只会影响性能。

在这种情况下,虽然灵 active 值得赞赏,但它可能比任何事情都更像是一种负担。全局的或线程局部的,然后才有意义。

关于rust - 如何在库中实现长期变量/状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59028838/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com