Rust如何访问vector中结构体的枚举Variant并匹配Option字段
错误原因
- 字段访问语法不符合Rust规则:你定义的
students是存储Student结构体实例的动态数组,不是结构体类型,不存在students.Student::locker这种访问写法。你在for循环中拿到的每一个student就是单个Student结构体实例,直接通过student.locker就能获取对应学生的locker字段值。 - 补充:如果要打印学生姓名,需要先给
StudentNames枚举实现Debug特征,否则无法直接输出枚举变体内容。
修正后的可运行代码
// 给枚举实现Debug特征支持打印 #[derive(Debug)] enum StudentNames { Vlad, Andrei, Dragos, } struct Student { student_name: StudentNames, locker: Option<i32>, } fn main() { let students = vec![ Student { student_name: StudentNames::Vlad, locker: Some(1), }, Student { student_name: StudentNames::Andrei, locker: Some(2), }, Student { student_name: StudentNames::Dragos, locker: None, }, ]; for student in students { // 直接访问student实例的locker字段做匹配 match student.locker { Some(locker_num) => println!("学生{:?}的储物柜编号是{}", student.student_name, locker_num), None => println!("学生{:?}没有分配储物柜", student.student_name), } } }
运行输出
学生Vlad的储物柜编号是1
学生Andrei的储物柜编号是2
学生Dragos没有分配储物柜
内容的提问来源于stack exchange,提问作者VladAcV
相关产品推荐
相关产品推荐

