1 个不稳定版本
使用旧的 Rust 2015
0.1.1 | 2016年3月24日 |
---|
#1825 in Rust 模式
6KB
93 行
derive_from
Rust derive(From) 宏
它只适用于只有一个元素的元组结构体(newtypes)或包含这些元组结构体的枚举。这些元组结构体包裹的类型可以通过使用 .into()
方法简单地进行转换。
对于枚举,由于这可能会导致歧义,因此不会为出现多次的类型生成 from 代码。
它可以这样简单地使用
#[derive(From)]
struct MyInt(i32);
#[derive(From)]
enum MyIntEnum{
Int(i32),
Bool(bool),
UnsignedOne(u32),
UnsignedTwo(u32),
Nothing,
}
编译后生成的代码将如下所示
struct MyInt(i32);
impl ::std::convert::From<i32> for MyInt {
fn from(a: i32) -> MyInt { MyInt(a) }
}
enum MyIntEnum {
Int(i32),
Bool(bool),
UnsignedOne(u32),
UnsignedTwo(u32),
Nothing,
}
impl ::std::convert::From<i32> for MyIntEnum {
fn from(a: i32) -> MyIntEnum { MyIntEnum::Int(a) }
}
impl ::std::convert::From<bool> for MyIntEnum {
fn from(a: bool) -> MyIntEnum { MyIntEnum::Bool(a) }
}
由于这一点以及 Rust 的内置类型推断,现在可以进行以下操作
fn main() {
let my_enum_val = MyIntEnum::Int(5);
if en_enum_val == 5.into() {
println!("The content of my_enum_val is 5")
}
}