#macro #seq #repetition #fragment #expand #substitute #sequential

无 std seq-macro

宏,用于顺序重复代码片段的索引副本

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开发工具

Download history 191443/week @ 2024-03-14 177746/week @ 2024-03-21 174222/week @ 2024-03-28 173469/week @ 2024-04-04 186690/week @ 2024-04-11 191421/week @ 2024-04-18 189903/week @ 2024-04-25 181783/week @ 2024-05-02 205172/week @ 2024-05-09 245985/week @ 2024-05-16 244646/week @ 2024-05-23 255278/week @ 2024-05-30 284500/week @ 2024-06-06 248074/week @ 2024-06-13 292108/week @ 2024-06-20 260195/week @ 2024-06-27

1,139,396 每月下载量
642 个软件包中 使用 (直接使用 91 个)

MIT/Apache

25KB
522

seq!

github crates.io docs.rs build status

一个 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.0MIT 许可证 下许可。
除非您明确表示,否则您有意提交给本软件包的任何贡献,根据 Apache-2.0 许可证定义,将根据上述许可证双重许可,没有任何附加条款或条件。

无运行时依赖