#collection #literals #iterator #macro

collect-all

vec! 用于一切:轻松创建任何集合的字面量!

1 个不稳定版本

0.1.0 2023 年 3 月 28 日

#2735Rust 模式


用于 projectable

MIT 许可证

8KB
57

collect-all

Build status Crates.io Docs Status

一个宏,用于创建任何类型的集合字面量!想想看 vec!,但适用于任何集合类型!

内部,这仅仅使用了 Iterator::collect() 方法。由于 collectFromIterator 驱动,你可以通过实现它来为你的类型使用这个宏!

示例

基本用法,推断集合的类型

use collect_all::collect;
use std::collections::HashSet;

let hashset: HashSet<i32> = collect![1, 2, 3];
assert_eq!(HashSet::from_iter([1, 2, 3]), hashset);

在宏调用中指定类型

use collect_all::collect;
use std::collections::HashMap;

let hashmap = collect![HashMap<&str, u8>: ("one", 1), ("two", 2)];
assert_eq!(HashMap::from_iter([("one", 1), ("two", 2)]), hashmap);

使用指定的容量创建

use collect_all::collect;
use std::path::PathBuf;

let pathbuf = collect![PathBuf: "path", "to", "file"; 10];
assert_eq!(PathBuf::from("path/to/file"), pathbuf);
assert!(pathbuf.capacity() >= 10);

请注意,这依赖于一些针对给定集合的 非严格保证 的东西

  1. with_capacity 是目标类型的方法(例如,参见 Vec::with_capacity
  2. 目标类型实现了 Extend

许可证

此包采用 MIT 许可证。

无运行时依赖