在宏中编写“let”语句时“没有规则需要令牌”

And*_*ahl 1 let rust

当我尝试使用以下命令编译此代码时rustc main.rs

macro_rules! getPI {
    let pi = 3.141592;
    println!("Pi is roughly 3.142 \n {0}", pi);
}

fn main() {
    print!(getPI);
}
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误:

macro_rules! getPI {
    let pi = 3.141592;
    println!("Pi is roughly 3.142 \n {0}", pi);
}

fn main() {
    print!(getPI);
}
Run Code Online (Sandbox Code Playgroud)

我对编程很陌生,希望有人能提供解决方案。

She*_*ter 6

如果您“对编程非常陌生”,那么您应该从头开始;宏并不是开始。返回并重新阅读《Rust 编程语言》第二版,尽管它的目标读者是已经了解另一种编程语言的人。

然后您可以阅读第一版中有关宏的章节。这将向您展示宏的正确语法。宏有很多分支,就像一个match语句:

macro_rules! getPI {
    () => {
        let pi = 3.141592;
        println!("Pi is roughly 3.142 \n {0}", pi);
    }
}

fn main() {
    getPI!();
}
Run Code Online (Sandbox Code Playgroud)

我也不知道你为什么要尝试print!宏的返回值,所以我删除了它。您还必须使用感叹号 ( !) 来调用宏。