本文介绍了如何在 Rust 中迭代和更改可变数组中的值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是我走了多远:
#[derive(Copy, Clone, Debug)]
enum Suits {
Hearts,
Spades,
Clubs,
Diamonds,
}
#[derive(Copy, Clone, Debug)]
struct Card {
card_num: u8,
card_suit: Suits,
}
fn generate_deck() {
let deck: [Option<Card>; 52] = [None; 52];
for mut i in deck.iter() {
i = &Some(Card {
card_num: 1,
card_suit: Suits::Hearts,
});
}
for i in deck.iter() {
println!("{:?}", i);
}
}
fn main() {
generate_deck();
}
它只打印出None
.我的借款有问题吗?我做错了什么?
It only prints out None
. Is there something wrong with my borrowing? What am I doing wrong?
推荐答案
首先,你的牌组是不可变的.请记住,rust 绑定默认是不可变的:
First, your deck is not mutable. Remember in rust bindings are non-mutable by default:
let mut deck: [Option<Card>; 52] = [None; 52];
接下来,要获得可以修改的迭代器,请使用iter_mut()
:
Next, to obtain an iterator you can modify, you use iter_mut()
:
for i in deck.iter_mut() {
最后:循环中的i
是对deck 元素的可变引用.要将某些内容分配给引用,您需要取消引用它:
Finally: the i
that you have in your loop is a mutable reference to the elements of deck. To assign something to the reference, you need to dereference it:
*i = Some(Card {
card_num: 1,
card_suit: Suits::Hearts,
});
这篇关于如何在 Rust 中迭代和更改可变数组中的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!