derive_more, 更多 derive(Trait) 选项

分享于 

6分钟阅读

GitHub

  繁體 雙語
Some more derive(Trait) options
  • 源代码名称:derive_more
  • 源代码网址:http://www.github.com/JelteF/derive_more
  • derive_more源代码文档
  • derive_more源代码下载
  • Git URL:
    git://www.github.com/JelteF/derive_more.git
    Git Clone代码到本地:
    git clone http://www.github.com/JelteF/derive_more
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/JelteF/derive_more
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    derive_more

    Build StatusLatest VersionRust DocumentationGitHub license

    Rust 有许多内置的特性,它们是为它的基本类型( 例如 AddNot 或者From 实现的)。 但是,当在自己的结构或者枚举中包装这些类型时,你将丢失这些特性的实现,并且需要重新创建它们。 当你自己的结构非常简单时,这特别令人烦恼,比如当使用常见的新建 Pattern ( 比如。 MyInt(i32) )。

    这个图书馆试图消除这些烦恼和相应的样板代码。 它通过允许你派生结构和枚举的许多常用特性来实现这一点。

    示例代码

    通过使用这里库,下面的代码仅适用于:

    #[macro_use]externcrate derive_more;
    #[derive(Debug, Eq, PartialEq, From, Add)]structMyInt(i32);
    #[derive(Debug, Eq, PartialEq, From, Into, Constructor, Mul)]structPoint2D {
     x: i32,
     y: i32,
    }
    #[derive(Debug, Eq, PartialEq, From, Add)]enumMyEnum {
     Int(i32),
     UnsignedInt(u32),
     Nothing,
    }fnmain() {
     let my_11 =MyInt(5) +6.into();
     assert_eq!(MyInt(11), MyInt(5) +6.into());
     assert_eq!(Point2D { x: 5, y: 6 } *10, (50, 60).into());
     assert_eq!((5, 6), Point2D { x: 5, y: 6 }.into());
     assert_eq!(Point2D { x: 5, y: 6 }, Point2D::new(5, 6));
     assert_eq!(MyEnum::Int(15), (MyEnum::Int(8) +7.into()).unwrap())
    }

    可以衍生的特征

    下面是使用这个库可以得到的所有特性。 某些特征派生非常相似,因此进一步的文档只能显示其中的一个。 你可以用"-like"后缀的名字来识别它们。 这个特性名称将是唯一一个在整个文档中使用的。

    注意 : 你仍然需要分别推导每个特性。 所以 #[derive(Mul)] 不会自动导出 Div。 要导出两者,应该执行 #[derive(Mul, Div)]

    转换特性

    这些是用于在类型之间自动转换的特性。

    格式特征

    这些特性用于以不同的方式将结构转换为字符串。

    操作符

    这些特性可以用于运算符重载。

    static-方法

    这些不派生特性,而是派生 static 方法。

    • Constructor,这派生了一个可以用作构造函数的new 方法。 如果你需要对构造函数进行更多定制,请查看 derive-new 框,这是非常基本的。

    生成的代码

    理解使用这个板条箱中的一个派生的代码时产生什么代码是很重要的。 这就是下面的链接解释了为每个组的特性生成哪些代码的原因。

    如果希望确定为特定类型生成的代码,建议使用 cargo-expand 命令行实用工具。 这将向你显示所有宏的代码并展开。

    安装

    这里库需要 Rust 1.15或者更高版本,因此需要安装这里库。 然后将以下内容添加到 Cargo.toml:

    [dependencies]derive_more = "0.11.0"

    这是你的Rust file:的顶部

    #[macro_use]externcrate derive_more;

    SOM  DER  Trait  
    相关文章