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)