Rust a中的所有权问题;而让",;

Rust a中的所有权问题;而让",;,rust,borrow-checker,Rust,Borrow Checker,当我添加代码以改变items变量时,问题就出现了。 以下代码示例未编译: #[derive(Debug)] struct Item { value: u16, weight: u16, name: &'static str, //ratio: f32 } impl PartialEq for Item { fn eq(&self, other: &Item) -> bool { self.name == ot

当我添加代码以改变
items
变量时,问题就出现了。 以下代码示例未编译:

#[derive(Debug)]
struct Item {
    value: u16,
    weight: u16,
    name: &'static str,
    //ratio: f32
}

impl PartialEq for Item {
    fn eq(&self, other: &Item) -> bool {
        self.name == other.name
    }
}

#[derive(Debug)]
struct KnapSack<'a> {
    capacity: u16,
    current: u16,
    items: Vec<&'a Item>
}

fn main() {
    let mut items = vec![
        Item { name: "map", weight: 9, value: 150},
        Item { name: "compass", weight: 13, value: 35},
        Item { name: "water",   weight: 153, value: 200},
        Item { name: "sandwich", weight: 50, value: 160},
        Item { name: "glucose", weight: 15, value: 60},
        Item { name: "tin", weight: 68, value: 45},
        Item { name: "banana", weight: 27, value: 60},
        Item { name: "apple", weight: 39, value: 40},
        Item { name: "cheese", weight: 23, value: 30},
        Item { name: "beer", weight: 52, value: 10},
        Item { name: "suntan cream", weight: 11, value: 70},
        Item { name: "camera", weight: 32, value: 30},
        Item { name: "T-shirt", weight: 24, value: 15},
        Item { name: "trousers", weight: 48, value: 10},
        Item { name: "umbrella", weight: 73, value: 40},
        Item { name: "waterproof trousers", weight: 42, value: 70},
        Item { name: "waterproof overclothes", weight: 43, value: 75},
        Item { name: "note-case", weight: 22, value: 80},
        Item { name: "sunglasses", weight: 7, value: 20},
        Item { name: "towel", weight: 18, value: 12},
        Item { name: "socks", weight: 4, value: 50},
        Item { name: "book", weight: 30, value: 10 },
    ];
    let mut knapsack = KnapSack{ capacity: 400, current: 0, items: vec![]};

    while let Some(item_ref) = take_highest_value_item(&items, knapsack.capacity - knapsack.current) {
        knapsack.current += (*item_ref).weight;
        knapsack.items.push(item_ref);

        items
            .iter()
            .position(|&n| n == *item_ref)
            .map(|e| items.remove(e));
    }

    println!("Items : {:?}", knapsack.items);
}



fn take_highest_value_item(items: &Vec<Item>, max_weight: u16) -> Option<&Item> {
    items
        .iter()
        .fold(None, |acc, item_ref| {
            if (*item_ref).weight > max_weight {
                return acc;
            }

            match acc {
                None =>
                    Some(item_ref),
                Some(acc_item) =>
                    if acc_item.value > (*item_ref).value {
                        acc
                    } else {
                        Some(item_ref)
                    }
            }  
        })
}

任何关于如何修复它的提示都将非常棒

是我试图解决的问题。函数
获取最高值\u item
借用
items
并返回其中一项。您想将其从
项目中删除,但要删除的项目是借阅未结束的原因。最简单的修复方法可能是更改函数
获取最高值项目
,并从
项目
中删除该函数中的项目。另请看,我很确定这个例子不是最小的。现在已经有几十个借用的问题了:这个问题与之前的问题有什么不同?谢谢@wimh,我已经试过了,但是因为我在一个循环中,编译器认为我同时使用了多个可变引用(&mut项)。