1

我正在写一个宏:

macro_rules! foo {
    ($(print)?) => {
        // run `println!("hello") if print is given
    }
}

可以称为:

  • foo!()什么都不做

  • foo!(print)这将打印你好

如何检测是否print已提供?当我使用重复运算符时,我需要放入一个变量。我可以使用某种空变量吗?( (print $print:empty)?)

4

1 回答 1

1

为每种情况制定单独的规则:

macro_rules! foo {
    () => {
        // do nothing
    };
    (print) => {
        println!("hello")
    };
}

fn main() {
    foo!(); // does nothing
    foo!(print); // prints "hello"
}

操场

于 2020-12-07T21:23:53.803 回答