2个不稳定版本
0.2.0 | 2020年8月21日 |
---|---|
0.1.0 | 2020年7月28日 |
#15 in #array-vec
9KB
97 行
init_trait
一个用于简化“可索引”数据结构初始化的小助手特质。
use init_trait::Init;
struct House { number: usize }
// [T; N]: Init<T, usize>
let road = <[House; 3]>::init(|i| House { number: i + 1 });
assert_eq!(road[0].number, 1);
assert_eq!(road[1].number, 2);
assert_eq!(road[2].number, 3);
要使用它,将其添加到您的Cargo.toml中的依赖项
[dependencies]
init_trait = "0.2.0"
lib.rs
:
一个助手特质,通过应用于每个“索引”的函数来初始化数据结构。
此特质旨在简化将“可索引”数据结构初始化为非默认值的操作。例如,如果您想初始化一个长或任意长度的数组,您需要首先将其初始化为某些默认值,然后修改每个元素为所需的值
// struct needs to implement either Copy or Default to initialise the array
#[derive(Copy, Clone)]
struct House { number: usize }
// Need to first initialise road to some dummy value to avoid the error:
// road[i] = House { number: i };
// ^^^^^^^ use of possibly-uninitialized `road`
let mut road = [House { number: 0 }; 3];
for i in 0..3 {
road[i] = House { number: i + 1 };
}
assert_eq!(road[0].number, 1);
assert_eq!(road[1].number, 2);
assert_eq!(road[2].number, 3);
对于泛型类型或无默认值的类型,这可能会很困难。
使用Init
,您可以为生成元素提供给定索引的函数
use init_trait::Init;
struct House { number: usize }
// [T; N]: Init<T, usize>
let road = <[House; 3]>::init(|i| House { number: i + 1 });
assert_eq!(road[0].number, 1);
assert_eq!(road[1].number, 2);
assert_eq!(road[2].number, 3);