当在宏中编写`let`语句时,“没有规则期望令牌”

时间:2017-08-01 17:52:25

标签: rust let

当我尝试使用rustc main.rs编译此代码时:

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

fn main() {
    print!(getPI);
}

它给了我一个错误:

error: no rules expected the token `pi`
 --> src/main.rs:2:9
  |
2 |     let pi = 3.141592;
  |         ^^

我是编程的新手,我希望有人有解决方案。

1 个答案:

答案 0 :(得分:3)

如果你是#34;非常新的编程",那么你应该从头开始;宏不是的开头。返回并重新阅读The Rust Programming Language, second edition,即使它针对已经了解其他编程语言的人。

然后,您可以阅读the chapter from the first edition about macros。这将显示宏的正确语法。宏有许多武器,如match声明:

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

fn main() {
    getPI!();
}

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