基于枚举初始化变量



我有一个枚举:

enum DaEnum{
One(u8),
Strang(String),
}

我想从枚举中为变量y赋值:

let x = DaEnum::One(1);
let y;
match x{
DaEnum::One(one) => {y = one},
DaEnum::Strang(strang) => {y = strang},
}
println!("Value of y =>{:?}",y);

以下是来自cargo run:的错误

error[E0308]: mismatched types
--> srcmain.rs:33:40
|
30 |     let y;
|         - expected due to the type of this binding
...
33 |         DaEnum::Strang(strang) => {y = strang},
|                                        ^^^^^^ expected `u8`, found struct `String`

期望的情况是当x1y1,并且当xString时,y也将是String

如果一个通用函数足够简单,它可能会对您的情况有所帮助。您可以将所有常见行为提取到一个函数中,并在每个匹配臂中调用它。请注意这个特性,因为你的所有用法都必须共享它。

#[derive(Clone)]
enum DaEnum {
One(u8),
Strang(String),
}
fn main() {
let x = DaEnum::One(1);
fn common_stuff<T: std::fmt::Debug>(v: T) {
// common stuff
println!("Value of y =>{:?}", v);
}
// (1)
match x.clone() {
DaEnum::One(one) => {
let y = one;
// not common stuff
common_stuff(y);
}
DaEnum::Strang(strang) => {
let y = strang;
// not common stuff
common_stuff(y);
}
}
// (2)
match x {
DaEnum::One(one) => common_stuff(one),
DaEnum::Strang(strang) => common_stuff(strang),
}
}

最新更新