如何在Rust中迭代和更改可变数组中的值?

如何在Rust中迭代和更改可变数组中的值?,rust,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>; 5

这就是我取得的成绩:

#[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();
}
#[派生(复制、克隆、调试)]
枚举诉讼{
心,
黑桃,
俱乐部,
钻石,
}
#[派生(复制、克隆、调试)]
结构卡{
卡片编号:u8,
卡丁西服:西服,
}
fn生成_deck(){
let deck:[选项;52]=[无;52];
对于甲板上的mut i.iter(){
i=&Some(卡片){
卡片编号:1,
卡片套装:套装::红心,
});
}
对于甲板上的i.iter(){
println!(“{:?}”,i);
}
}
fn main(){
生成_deck();
}

它只打印出
。我借钱有什么问题吗?我做错了什么?

首先,你的牌组是不可变的。请记住,在rust中,绑定在默认情况下是不可变的:

let mut deck: [Option<Card>; 52] = [None; 52];
最后:循环中的
i
是对deck元素的可变引用。要将某些内容分配给引用,需要取消引用:

*i = Some(Card {
    card_num: 1,
    card_suit: Suits::Hearts,
});

首先,你的牌组是不可变的。请记住,在rust中,绑定在默认情况下是不可变的:

let mut deck: [Option<Card>; 52] = [None; 52];
最后:循环中的
i
是对deck元素的可变引用。要将某些内容分配给引用,需要取消引用:

*i = Some(Card {
    card_num: 1,
    card_suit: Suits::Hearts,
});

iter
=>
iter\u mut
-关于错误的线索之一是在输出中:“警告:分配给
i
的值永远不会被读取”,行:
i=&Some(卡片{
。它没有被读取,因此变异没有任何影响。您正在为变量写入新引用,并且没有给现有引用一个新值。
iter
=>
iter\u mut
-关于错误的线索之一是输出:“警告:分配给
i
的值永远不会被读取”,对于行:
i=&Some(Card{
。它没有被读取,因此变异没有任何影响。您正在为变量写入新引用,而没有为现有引用提供新值。