2 个版本
使用旧Rust 2015
0.2.2 | 2018年5月17日 |
---|---|
0.2.1 | 2018年5月17日 |
#2125 在 数据结构
19KB
450 行
sac
一个Rust宏,可以构建任何实现FromIterator的集合的实例。
Cargo.toml
[dependencies]
sac = "0.2"
main.rs
#[macro_use]
extern crate sac;
fn main() {
let vec: Vec<_> = sac![1, 2, 3, 4];
assert_eq!(vec, vec![1, 2, 3, 4]);
}
如果编译器可以推断类型,则不需要类型注解
struct VecWrapper(Vec<i32>);
let container = VecWrapper(sac![1, 2, 3, 4]);
也支持尾随逗号
let vec: Vec<_> = sac![
1,
2,
3,
4,
];
assert_eq!(vec, vec![1, 2, 3, 4]);
该宏还可以使用类似结构的语法构建映射(例如 HashMap)
use std::collections::HashMap;
let map_with_syntax_sugar: HashMap<_, _> = sac! {
"foo": "bar",
"marco": "polo",
};
let map_without_syntax_sugar: HashMap<_, _> = sac! [
("foo", "bar"),
("marco", "polo"),
];
assert_eq!(map_with_syntax_sugar, map_without_syntax_sugar);
可以使用变量作为键和值
use std::collections::HashMap;
let key = "foo";
let value = "bar";
let map: HashMap<_, _> = sac! {
key: value,
};
assert_eq!(map, sac! { "foo": "bar" });
要使用表达式作为键,请将它们用括号或花括号括起来
use std::collections::HashMap;
let map: HashMap<_, _> = sac! {
(1 + 1): "two",
{2i32.pow(2)}: "four",
};
assert_eq!(map, sac! { 2: "two", 4: "four" });
许可证:MIT