gpt4 book ai didi

rust - 不能借用 `*x` 作为可变的,因为它也被借用为不可变的

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

我正在做一个组合优化项目来学习 Rust,我遇到了一个我自己无法解决的问题...

我有两个函数:

pub fn get_pareto_front_offline<'a>(scheduling_jobs: &'a Vec<Vec<u32>>, costs_vector: &'a Vec<(u32, u32)>) -> Vec<(&'a Vec<u32>, &'a (u32, u32))> {
// ...
}

pub fn pareto_approach_offline<'a>(list_of_jobs: &'a mut Vec<Vec<u32>>, neighborhood: &'a mut Vec<Vec<u32>>, costs: &'a Vec<(u32, u32)>) -> Vec<(&'a Vec<u32>, &'a (u32, u32))> {
let pareto_front = get_pareto_front_offline(neighborhood, costs);

loop {
if pareto_front == vec![] {
break;
}

neighborhood.clear();

for front in pareto_front.iter() {
neighborhood.push((front.0).clone());
}
}

pareto_front
}

我遇到了一个问题,因为编译器告诉我:

cannot borrow '*neighborhood' as mutable because it is also borrowed as immutableat line 15 col 9
cannot borrow '*neighborhood' as mutable because it is also borrowed as immutableat line 19 col 13

最佳答案

您正在尝试做一些根本不可能的事情。

当您调用 get_pareto_front_offline 时, 你传一个再借neighborhood进入那个功能。为了 pareto_front,必须维护此重新借用保持有效。也就是说,只要pareto_front存在,编译器不会允许您访问 neighborhood以任何方式。

这是一件好事,因为您随后会继续尝试清除我们的 neighborhood ,这几乎肯定会使pareto_front无效,可能会导致释放后使用并破坏程序的状态。

不清楚您要做什么;但是你不能这样做。

顺便说一句,即使编译了,该循环也可能永远不会结束运行:您的终止条件 ( pareto_front == vec![] ) 永远不会满足,因为您永远不会修改 pareto_front ;它要么立即停止,要么永远运行。

摆脱借用问题的最简单方法是复制东西,这样您就需要长期借用;如果get_pareto_front_offline返回了 Vec<(Vec<u32>, (u32, u32))>相反,你不会有这个问题。那,或修改代码以不触摸neighborhood一旦你调用get_pareto_front_offline .

关于rust - 不能借用 `*x` 作为可变的,因为它也被借用为不可变的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33985018/

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