let x: MyStruct;
没有设置x
为空值,它声明一个变量。您仍然需要为其分配一个值。
fn f(y: MyEnum) -> MyStruct {
let x;
match y {
MyEnum::One => {
x = MyStruct { a: 1, b: 1 };
}
MyEnum::Two => {
x = MyStruct { a: 2, b: 2 };
}
MyEnum::Three => {
x = MyStruct { a: 3, b: 3 };
}
}
x
}
换句话说,let x;
创建一个未绑定变量,即没有关联值的变量。因此您需要稍后为其绑定一些值。
如果您只想从函数返回一个值,则可以利用以下事实:Rust 中几乎每个语句都会产生一个值,并且最后一个语句的值是函数的返回值。
fn f(y: MyEnum) -> MyStruct {
use MyEnum::*;
let x = match y {
One => MyStruct { a: 1, b: 1 },
Two => MyStruct { a: 2, b: 2 },
Three => MyStruct { a: 3, b: 3 },
};
x
}
也可以彻底消除x
,如果你这样选择的话。
fn f(y: MyEnum) -> MyStruct {
use MyEnum::*;
match y {
One => MyStruct { a: 1, b: 1 },
Two => MyStruct { a: 2, b: 2 },
Three => MyStruct { a: 3, b: 3 },
}
}