gpt4 book ai didi

rust - 如何在函数调用之间在模块内存储状态?

转载 作者:行者123 更新时间:2023-12-03 11:36:41 24 4
gpt4 key购买 nike

我在一个模块中有以下功能:

pub fn square(s: u32) -> u64 {
if s < 1 || s > 64 {
panic!("Square must be between 1 and 64")
}

total_for_square(s) - total_for_square(s - 1)
}

fn total_for_square(s: u32) -> u64 {
if s == 64 {
return u64::max_value();
}

2u64.pow(s) - 1
}

pub fn total() -> u64 {
u64::max_value()
}
这在直接调用单个函数时效果很好。但是,我想优化它并将值缓存到 total_for_square以加快 future 的查找速度(存储在 HashMap 中)。我应该如何处理 HashMap 的存储位置所以它在通话之间可用?我知道我可以重构以将所有这些都放在一个结构中,但在这种情况下,我无法更改 API。
在我使用过的其他更高级的语言中,我只会有一个与函数在同一范围内的变量。但是,尚不清楚在模块级别的 Rust 中这是否可能。

最佳答案

In other, higher level languages I have used, I would just have a variable in the same scope as the functions.


你可以在 Rust 中使用类似的东西,但它在语法上更复杂:你需要使用 lazy_static 为你的缓存创建一个全局缓存。或 once_cell例如。
不过,缓存需要是线程安全的,因此要么是位于 Mutex 或 RwLock 后面的常规映射,要么是某种并发映射。
尽管您只有 64 个输入,但您可以预先计算整个事物并直接返回预先计算的值。

关于rust - 如何在函数调用之间在模块内存储状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64747520/

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