# # #集合 #任务

糖类

一组有用的宏,使任务更轻松

11 个版本 (6 个稳定版)

3.0.1 2022年2月4日
3.0.0 2020年12月22日
2.0.0 2020年9月6日
1.2.0 2020年5月1日
0.4.0 2019年7月19日

#232Rust 模式

Download history 478/week @ 2024-03-13 510/week @ 2024-03-20 614/week @ 2024-03-27 335/week @ 2024-04-03 2042/week @ 2024-04-10 534/week @ 2024-04-17 407/week @ 2024-04-24 121/week @ 2024-05-01 184/week @ 2024-05-08 535/week @ 2024-05-15 617/week @ 2024-05-22 622/week @ 2024-05-29 395/week @ 2024-06-05 517/week @ 2024-06-12 951/week @ 2024-06-19 347/week @ 2024-06-26

每月下载量 2,377
用于 7 个包6 个直接使用)

自定义许可证

57KB
984

Sugars - 精美的 Rust 宏,使编写更轻松。

Crates.io Documentation License Github Actions Build Status Hits-of-Code

这个包提供了一组有用的宏,以简化任务。

它有什么好处?

  • 针对 std::collections 的宏
    • deque: 从元素列表创建 VecDeque
    • hset: 创建 HashSet
    • btset: 创建 BTreeSet
    • bheap: 创建 BinaryHeap
    • hmap: 从键值对创建 HashMap
    • btmap: 创建 BTreeMap
    • lkl: 从元素列表创建 LinkedList
    • rlkl: 创建反向的 LinkedList
  • 针对 .collect() 理解的宏
    • c: 创建懒 Iterator 理解的宏,以下其他宏基于此。
    • cbheap: 使用理解构建 BinaryHeap
    • cbtmap: 使用理解构建 BTreeMap
    • cbtset:使用“ .”构建 BTreeSet
    • cdeque:使用“ .”构建 VecDeque
    • cmap:使用“ .”构建 HashMap
    • cset:使用“ .”构建 HashSet
    • cvec:使用“ .”构建 Vec
  • 智能指针
    • arc:创建新的 Arc¹
    • boxed:创建新的 Box¹
    • cell:创建新的 Cell¹
    • mutex:创建新的 Mutex¹
    • refcell:创建新的 RefCell¹
    • rc:创建新的 Rc¹
    • rwlock:创建新的 RwLock¹
    • cow:创建新的 Cow
  • 时间/持续时间
    • dur:根据时间模式创建 Duration 对象。²
    • sleep:使当前线程休眠指定的时间量。²
    • time:打印出执行给定表达式所需的时间(以秒为单位)。
  1. 如果提供了多个参数,则返回一个元组。
  2. 接受的时间模式有:minsecnanomicromilli

示例

std::collections

boxedarccellcowmutexrefcell 的使用,与 rc 相同

assert_eq!(Box::new(10), boxed!(10));

hmap 的使用,与 btmap 相同

let mut map = HashMap::new();
map.insert("1", 1);
map.insert("2", 2);
map.insert("3", 3);

let map2 = hmap! {"1" => 1, "2" => 2, "3" => 3};

assert_eq!(map, map2);

hset 的使用,与 btset 相同

let set = hset! {1, 2, 3};

let mut set2 = HashSet::new();
set2.insert(1);
set2.insert(2);
set2.insert(3);

assert_eq!(set, set2);

deque 的使用,与 bheaplklrlkl 相同

let deque = deque![1, 2, 3];

let mut deque2 = VecDeque::new();
deque2.push_back(1);
deque2.push_back(2);
deque2.push_back(3);

assert_eq!(deque2, deque);

生成器表达式

c! 的使用:其语法如下:`c![<expr>; <<pattern> in <iterator>, >...[, if <condition>]]`。

请注意,它生成一个懒 迭代器,需要处理。

let vec = c![x; x in 0..10].collect::<Vec<_>>();
let set = c![i*2; &i in vec.iter()].collect::<HashSet<_>>();
// A more complex one
let vec = c![i+j; i in vec.into_iter(), j in set.iter(), if i%2 == 0 && j%2 != 0].collect::<Vec<_>>();

// Or using type hints
let vec: Vec<_> = c![x; x in 0..10].collect();
let set: HashSet<_> = c![i*2; &i in vec.iter()].collect();
let vec: Vec<_> = c![i+j; i in vec.into_iter(), j in set.iter(), if i%2 == 0 && j%2 != 0].collect();

《cvec!》的使用,与 cdeque!clkl!cbheap! 相同

// Normal comprehension
cvec![x; x in 0..10];

// You can filter as well
cvec![x; x in 0..10, if x % 2 == 0];

《cset》的使用,与 cbtset 相同

// Normal comprehension
cset! {x; x in 0..10};

// You can filter as well
cset! {x; x in 0..10, if x % 2 == 0};

《cmap》的使用,与 cbtmap 相同

// Normal comprehension
cmap! {x => x*2; x in 1..10};

// You can filter as well
cmap! {x => x*2; x in 1..10, if x % 2 == 0};

时间/持续时间

《dur》和《sleep》的使用

let d1 = dur!(10 sec);
let d2 = std::time::Duration::from_secs(10);

assert_eq!(d1, d2);

// Same syntax, but make the thread sleep for the given time
sleep!(10 sec)

《time》的使用

// Should print to stderr ≈ 2.0000 seconds
time!( sleep!(2 sec) );

// It also return the evaluated expression, like dbg! macro
let x = time!( 100 + 20 );

最低可接受Rust版本

此软件需要Rust版本等于或高于1.39.0。

许可证

此软件根据MIT公共许可证授权。

无运行时依赖