如何 return 来自声明性宏的新字符串?
How to return a new String from a declarative macro?
所以我在这里,和 Rustlings 一起开卡车,直到我对测试 4 大开眼界。
它要我写一个满足以下代码的宏:
fn main() {
if my_macro!("world!") != "Hello world!" {
panic!("Oh no! Wrong output!");
}
}
所以,我写了这个:
macro_rules! my_macro {
($val:expr) => {
println!("Hello {}", $val);
}
}
Rustlings 说出了这个:
error[E0308]: mismatched types
--> exercises/test4.rs:15:31
|
15 | if my_macro!("world!") != "Hello world!" {
| ^^^^^^^^^^^^^^ expected (), found reference
|
= note: expected type `()`
found type `&'static str`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0308`.
哪个,你知道的。我明白了。我明白问题出在哪里,但我不明白如何编写满足代码的宏。我可以更改我正在测试的代码,但这不是测试要我做的。我只是写一个宏。我很难过。我也不明白将宏封装在模块中有什么帮助,但测试说这是对模块和宏的测试。
println!
将打印到 stdout
。相反,您只想从宏中格式化字符串和 return 。使用 format!
代替,并删除 ;
以便它将 return 表达式而不是 ()
:
macro_rules! my_macro {
($val:expr) => {
format!("Hello {}", $val)
}
}
所以我在这里,和 Rustlings 一起开卡车,直到我对测试 4 大开眼界。
它要我写一个满足以下代码的宏:
fn main() {
if my_macro!("world!") != "Hello world!" {
panic!("Oh no! Wrong output!");
}
}
所以,我写了这个:
macro_rules! my_macro {
($val:expr) => {
println!("Hello {}", $val);
}
}
Rustlings 说出了这个:
error[E0308]: mismatched types
--> exercises/test4.rs:15:31
|
15 | if my_macro!("world!") != "Hello world!" {
| ^^^^^^^^^^^^^^ expected (), found reference
|
= note: expected type `()`
found type `&'static str`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0308`.
哪个,你知道的。我明白了。我明白问题出在哪里,但我不明白如何编写满足代码的宏。我可以更改我正在测试的代码,但这不是测试要我做的。我只是写一个宏。我很难过。我也不明白将宏封装在模块中有什么帮助,但测试说这是对模块和宏的测试。
println!
将打印到 stdout
。相反,您只想从宏中格式化字符串和 return 。使用 format!
代替,并删除 ;
以便它将 return 表达式而不是 ()
:
macro_rules! my_macro {
($val:expr) => {
format!("Hello {}", $val)
}
}