我在一段动态规划中遇到了一种情况,要么获取预先计算的结果,要么调用函数计算这些结果。
这就是简短的情况说明。
let previous_results HashMap<String, Result> = HashMap::new();
for i in some_values {
let result = previous_results.get(i).unwrap_or_else(|| calculate_results(i))
}
Rust编译器在函数调用时发出了合理的警告,并指出:
expected reference `&HashMap<std::string::String, Result>`
found struct `HashMap<std::string::String, Result>`
这是因为
.get
通常返回一个对象的引用,而不是实际的对象,但该函数返回实际的对象。所以我可以返回该函数返回的内容的引用。let result = previous_results.get(i).unwrap_or_else(|| &calculate_results(i))
请注意函数调用前面的
&
。但这也是一个问题,因为匿名函数范围内的引用在匿名函数返回后将变得无意义,这会导致 Rust 抱怨。cannot return reference to temporary value
returns a reference to data owned by the current function
我在这里缺少什么?使用 Rust 正确的方法是什么?