首页 文章

Rust Macros中相同变量的不同分隔符

提问于
浏览
-3

我想匹配一个模式,如:

foo!(1,2,3;4,5,6;7,8,9);

将为所有数字生成相同的代码,但是当需要使用分号时,我希望运行其他代码 . 这种模式可能吗?

我试过了:

macro_rule! {
    foo ($($x:expr),*);*) => ...

但我似乎无法在右侧进行这项工作 .

1 回答

  • 0

    你从来没有解释现有代码的问题,所以我不知道在这个例子中要强调什么:

    macro_rules! foo {
        ($($($x:expr),*);*) => {
            $(
                $(
                    print!("{},", $x);
                )*
                println!("semi");
            )*
        }
    }
    
    fn main() {
        foo!(1,2,3;4,5,6;7,8,9); 
    }
    

    我可以从原始代码中指出:

    • 它被称为 macro_rules! ,而不是 macro_rule!

    • 正在定义的宏的名称位于原始 { 之前,而不是之后 .

    • 与大多数编程一样,配对分隔符需要均匀匹配才能在语法上有效 .

    The Rust Programming Language, first edition有几条有 Value 的信息 .

    macros chapter中介绍了定义宏的基本语法 . 我强烈建议你阅读整篇文章 . 它还链接到the reference,其中包含更多低级细节 .

    与您的问题最相关的部分是:

    重复重复运算符遵循两个主要规则:$(...)遍历一个重复的“层”,对于它包含的所有$ name,锁步,每个$ name必须至少为$ $ (...) s匹配时 . 如果它更多,它将被复制,视情况而定 .

相关问题