gpt4 book ai didi

rust - Rust 宏中相同变量的不同分隔符

转载 作者:行者123 更新时间:2023-11-29 08:36:15 24 4
gpt4 key购买 nike

我想匹配这样的模式:

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

将为所有数字生成相同的代码,但我希望在有分号时运行额外的代码。这种模式可能吗?

我试过:

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

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

最佳答案

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

macro_rules! foo {
($($($x:expr),*);*) => {
$(
$(
print!("{},", $x);
)*
println!("semi");
)*
}
}

fn main() {
foo!(1,2,3;4,5,6;7,8,9);
}

我可以从您的原始代码中指出一些事情:

  1. 它叫做 macro_rules!,而不是 macro_rule!
  2. 正在定义的宏的名称在原始 { 之前,而不是之后。
  3. 与大多数编程一样,成对的定界符需要均匀匹配才能在句法上有效。

The Rust Programming Language, first edition有几条有值(value)的信息。

macros chapter 中介绍了定义宏的基本语法。 ;我强烈建议您阅读整篇文章。它还链接到 the reference ,其中包含一些更底层的细节。

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

Repetition

The repetition operator follows two principal rules:

  1. $(...)* walks through one "layer" of repetitions, for all of the $names it contains, in lockstep, and
  2. each $name must be under at least as many $(...)*s as it was matched against. If it is under more, it’ll be duplicated, as appropriate.

关于rust - Rust 宏中相同变量的不同分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48512946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com