Vector 函数如何将值附加到向量并返回该值?

Vector 函数如何将值附加到向量并返回该值?,vector,rust,move,Vector,Rust,Move,我正在尝试编写一个函数rotate\u card,该函数接受向量作为输入,将向量的前元素向后旋转,并返回一个包含旋转元素和旋转产生的向量的对 #[derive(Debug)] enum Card { Ace, King, Queen, Jack, } type Deck = Vec<Card>; fn rotate_card(deck: &mut Deck) -> (Card, &mut Deck) { let top

我正在尝试编写一个函数
rotate\u card
,该函数接受向量作为输入,将向量的前元素向后旋转,并返回一个包含旋转元素和旋转产生的向量的对

#[derive(Debug)]
enum Card {
    Ace,
    King,
    Queen,
    Jack,
}

type Deck = Vec<Card>;

fn rotate_card(deck: &mut Deck) -> (Card, &mut Deck) {
    let top_card = deck.remove(0);
    deck.push(top_card);
    (top_card, deck)
} // end rotate_card

fn main() {
    let mut my_deck: Deck = vec![Card::Ace, Card::King, Card::Queen, Card::Jack];
    let z: (Card, &mut Deck) = rotate_card(&mut my_deck);
    println!("The value of z is: {:?}.", z);
} // end main
如何处理移动后使用的
错误

我该如何工作

你不能“解决”这类问题。所有权是Rust中的一个基本概念,你必须理解它

解决 通过
Copy
通过
克隆

返回对该卡的引用
您可以返回对最后一张卡的引用,而不是作为值返回该卡:

fn rotate_card(deck: &mut Deck) -> &mut Card {
    let top_card = deck.remove(0);
    deck.push(top_card);
    deck.last_mut().unwrap()
}
使用引用计数 类似或的类型可以允许共享值的所有权:

use std::rc::Rc;

type Deck = Vec<Rc<Card>>;

fn rotate_card(deck: &mut Deck) -> Rc<Card> {
    let top_card = deck.remove(0);
    deck.push(top_card.clone());
    top_card
}
没有理由将
组返回给调用者;他们已经有了这个参考资料。去掉那个

切片(和通过
DerefMut
Vec
s)具有该方法;您不需要重新实现它

fn rotate_card(deck: &mut Deck) -> &mut Card {
    let top_card = deck.remove(0);
    deck.push(top_card);
    deck.last_mut().unwrap()
}
use std::rc::Rc;

type Deck = Vec<Rc<Card>>;

fn rotate_card(deck: &mut Deck) -> Rc<Card> {
    let top_card = deck.remove(0);
    deck.push(top_card.clone());
    top_card
}
fn rotate_card(deck: &mut Deck) -> (Card, &mut Deck)