如何访问枚举变量未命名字段?

Ana*_*kov 6 enums rust

我想打印没有命名字段的元组枚举数据。

元组是将一些具有多种类型的其他值分组为一个复合类型的通用方法。

#[derive(Debug)]
enum Coin {
    Penny(String),
    Nickel { id: String },
}

fn main() {
    let penny = Coin::Penny(String::from("penny"));
    let nickel: Coin = Coin::Nickel { id: String::from("nickel") };

    println!("{} {:?} ", penny.0, penny);
    println!("{:?}", nickel);
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,Nickel是一个类似结构体的枚举变体,而 则Penny简称为枚举变体

我收到编译器错误:

#[derive(Debug)]
enum Coin {
    Penny(String),
    Nickel { id: String },
}

fn main() {
    let penny = Coin::Penny(String::from("penny"));
    let nickel: Coin = Coin::Nickel { id: String::from("nickel") };

    println!("{} {:?} ", penny.0, penny);
    println!("{:?}", nickel);
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*son 5

您可以使用match语句或语句if let来使用变体的关联值:

#[derive(Debug)]
enum Coin {
    Penny(String),
    Nickel { id: String },
}

fn main() {
    let penny = Coin::Penny(String::from("penny"));
    let nickel: Coin = Coin::Nickel {
        id: String::from("nickel"),
    };

    if let Coin::Penny(name) = penny {
        println!("{}", name);
    }

    if let Coin::Nickel{ id } = nickel {
        println!("{}", id);
    }
}
Run Code Online (Sandbox Code Playgroud)

游乐场链接


Ana*_*kov 5

使用match语句示例:

#[derive(Debug)]
enum Coin {
    Penny(String),
    Nickel { id: String },
}

fn main() {
    let penny = Coin::Penny(String::from("penny"));
    let nickel: Coin = Coin::Nickel {
        id: String::from("nickel"),
    };

    match &penny {
        Coin::Penny(id) => {
            println!("{}; {:?}", id, penny);
        }
        _ => {}
    }

    match &nickel {
        Coin::Nickel { id } => {
            println!("{}; {:?}", id, nickel);
        }
        _ => {}
    }
}
Run Code Online (Sandbox Code Playgroud)

游乐场链接