Rust中基于枚举初始化变量遇类型不匹配错误的解决问询
解决Rust枚举赋值时的类型不匹配问题
你的问题本质是Rust的静态类型系统要求变量y必须有唯一确定的类型。当match分支里第一次给y赋值u8类型的one时,编译器就把y的类型固定为u8了,后续再给它赋值String类型的strang必然触发类型不匹配错误。
以下是几种可行的解决方案:
方案1:直接使用枚举类型DaEnum
既然需要保存枚举的不同变体,直接将y定义为DaEnum类型即可:
enum DaEnum { One(u8), Strang(String), } fn main() { let x = DaEnum::One(1); let y = x; // 若需保留原x,可改用match: // let y = match x { // variant => variant, // }; println!("Value of y => {:?}", y); }
后续需要使用y内部的值时,仍可通过match分支匹配处理。
方案2:统一转换为同一类型(如String)
如果最终需要的是统一格式的输出或处理,可将两种类型转换为String,让y的类型固定为String:
enum DaEnum { One(u8), Strang(String), } fn main() { let x = DaEnum::One(1); let y: String = match x { DaEnum::One(one) => one.to_string(), DaEnum::Strang(strang) => strang, }; println!("Value of y => {:?}", y); }
方案3:自定义通用枚举包装类型
如果需要保留原始类型的语义,可自定义一个通用枚举来包装这两种类型:
enum DaEnum { One(u8), Strang(String), } enum Value { Number(u8), Text(String), } fn main() { let x = DaEnum::One(1); let y: Value = match x { DaEnum::One(one) => Value::Number(one), DaEnum::Strang(strang) => Value::Text(strang), }; println!("Value of y => {:?}", y); }
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

