我有一个枚举:
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`
期望的情况是当x
是1
,y
是1
,并且当x
是String
时,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),
}
}