我正在上 Rustlings Rust-lang课程并致力于exercises/test4.rs
这是课程中唯一没有提示的练习。因此,在研究了一段时间之后,我正在伸出手来获得这个提示!
macro_rules! my_macro {
() => {
println!("Hello!");
};
($val:expr) => {
println!("Hello {}", $val);
}
}
fn main() {
if my_macro!("world!") != "Hello world!" {
panic!("Oh no! Wrong output!");
}
}
当我尝试编译时,出现以下错误:
error[E0308]: mismatched types
--> test4.rs:20:31
|
20 | if my_macro!("world!") != "Hello world!" {
| ^^^^^^^^^^^^^^ expected (), found reference
|
= note: expected type `()`
found type `&'static str`
error: aborting due to previous error
这个问题似乎是基于这样一个事实,即 Rust 宏的默认返回类型是一个空元组类型(即expected type ()
),当我们将它与静态字符串进行比较时。
如果练习的参数允许我更改主函数中的代码,那么练习似乎会更简单一些。但是,根据指令,唯一要做的就是编写一个宏来使代码编译。
据我了解,您不能显式声明宏的返回类型。所以我不知道如何进行。