如何从声明性宏返回新的String?

时间:2019-02-28 17:14:32

标签: string rust rust-macros rust-decl-macros

所以我在这里,与Rustlings一起运输,直到我对测试4宽泛了。

它要我编写一个满足以下代码的宏:

fn main() {
    if my_macro!("world!") != "Hello world!" {
        panic!("Oh no! Wrong output!");
    }
}

所以,我写了这个:

macro_rules! my_macro {
    ($val:expr) => {
        println!("Hello {}", $val);
    }
}

然后鲁斯林斯吐口水了

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`.

哪个,你知道。知道了我知道问题出在哪里,但我不明白如何编写满足代码要求的宏。我可以更改要测试的代码,但这不是测试要我做的。我只是写一个宏。我很沮丧我也不明白将宏封装在模块中将有什么帮助,但是测试表明这是对模块以及宏的测试。

1 个答案:

答案 0 :(得分:1)

/* istanbul ignore next */ }).then(res => res.json()) 将打印到println!。相反,您只想格式化字符串并从宏返回它。请改用stdout,然后放下format!,以便它返回表达式,而不是;

()