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日 |
#232 在 Rust 模式
每月下载量 2,377
用于 7 个包(6 个直接使用)
57KB
984 行
Sugars - 精美的 Rust 宏,使编写更轻松。
这个包提供了一组有用的宏,以简化任务。
它有什么好处?
- 针对
std::collections
的宏 - 针对
.collect()
理解的宏 - 智能指针
- 时间/持续时间
- 如果提供了多个参数,则返回一个元组。
- 接受的时间模式有:
min
、sec
、nano
、micro
和milli
。
示例
std::collections
boxed
、arc
、cell
、cow
、mutex
和 refcell
的使用,与 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
的使用,与 bheap
、lkl
和 rlkl
相同
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公共许可证授权。