15 个版本
0.3.5 | 2023年7月15日 |
---|---|
0.3.3 | 2023年3月5日 |
0.3.2 | 2022年12月17日 |
0.3.1 | 2022年8月3日 |
0.1.2 | 2018年8月24日 |
#94 在 开发工具
1,139,396 每月下载量
在 642 个软件包中 使用 (直接使用 91 个)
25KB
522 行
seq!
一个 seq!
宏,用于重复源代码片段并将顺序数字计数器插入到每个重复中。
[dependencies]
seq-macro = "0.3"
use seq_macro::seq;
fn main() {
let tuple = (1000, 100, 10);
let mut sum = 0;
// Expands to:
//
// sum += tuple.0;
// sum += tuple.1;
// sum += tuple.2;
//
// This cannot be written using an ordinary for-loop because elements of
// a tuple can only be accessed by their integer literal index, not by a
// variable.
seq!(N in 0..=2 {
sum += tuple.N;
});
assert_eq!(sum, 1110);
}
-
如果输入标记包含由
#(
...)*
包围的部分,则只重复那部分。 -
数字计数器可以粘贴到某些前缀的末尾以形成顺序标识符。
use seq_macro::seq;
seq!(N in 64..=127 {
#[derive(Debug)]
enum Demo {
// Expands to Variant64, Variant65, ...
#(
Variant~N,
)*
}
});
fn main() {
assert_eq!("Variant99", format!("{:?}", Demo::Variant99));
}
-
支持字节和字符范围:
b'a'..=b'z'
,'a'..='z'
。 -
如果范围界限以二进制、八进制、十六进制或零填充的形式编写,则这些功能在生成的任何标记中都得到保留。
use seq_macro::seq;
seq!(P in 0x000..=0x00F {
// expands to structs Pin000, ..., Pin009, Pin00A, ..., Pin00F
struct Pin~P;
});
许可证
根据您的选择,在 Apache 许可证,版本 2.0 或 MIT 许可证 下许可。除非您明确表示,否则您有意提交给本软件包的任何贡献,根据 Apache-2.0 许可证定义,将根据上述许可证双重许可,没有任何附加条款或条件。