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")
    }
}