4 个版本
0.1.3 | 2022 年 3 月 8 日 |
---|---|
0.1.2 | 2022 年 2 月 27 日 |
0.1.1 | 2022 年 2 月 27 日 |
0.1.0 | 2022 年 2 月 27 日 |
1660 在 数据结构 中
11KB
157 行
MoreTypes
为您的类型提供更多类型!理由
这个库是我的 records
库的继承者,旨在使其更加模块化和可组合。而不是一个 record
属性,moretypes
提供了几个属性,可以组合起来给对象赋予某些属性。这与特质不同,因为这些属性通常是多个特质的实现、构造函数、行为变化等。
记录
MoreTypes 中的记录是所有字段都公开的 struct(就像 records::record
,但没有大多数方法)。它们在配置 struct 等情况下很有用,在这些情况下,在每个字段前放置 pub
最多是令人厌烦的样板代码,在最坏的情况下是逻辑上错误的。以下划线开头的私有字段保持私有。
use moretypes::record;
#[record]
pub struct Config {
option1: String,
option2: u32,
}
pub fn main() {
let cfg = Config {
option1: String::from("Foo"),
option2: 69,
};
println!("option1 = {}, option2 = {}", cfg.option1, cfg.option2);
}
命名元组
命名元组是有命名字段的 struct,可以像元组 struct 一样使用。它们提供了将元组转换为/从元组转换的能力,以及像元组一样构建它们的方式(这些都可以通过标志关闭)。当您同时想要命名字段和顺序时,它们作为元组 struct 的替代品非常有用。字段按它们声明的顺序排序。
use moretypes::named_tuple;
#[named_tuple]
pub struct Vec3<T> {
x: T,
y: T,
z: T,
}
pub fn main() {
let pos = Vec3::new(1.0, 2.0, 3.0);
println!("{:?}", pos.as_tuple());
}
依赖关系
~1.5MB
~34K SLoC