Я строю то, что мне показалось довольно простым макросом в Rust для произвольного списка аргументов (str
или ansi_term::Style
объектов).
Мой макрос выглядит так:
macro_rules! test_macro {
( $( $x: tt ),* ) => (
$(
print!("{} ", $x);
)*
println!();
)
}
Для минимального рабочего примера я также определил модуль и функцию:
mod foo {
pub fn test() -> &'static str {
"doesn't"
}
}
fn test() -> &'static str {
"doesn't"
}
Макрос работает с простыми вызовами, такими как
test_macro!("it", "works");
, ноесли я попробую что-нибудь более сложное, я получаю ошибки компилятора:
fn test() -> &'static str {
"doesn't"
}
test_macro!("it", test(), "work");
приводит к
error: no rules expected the token `(`
|
24 | test_macro!("it", test(), "work");
| ^
| |
| help: missing comma here
и
test_macro!("it", foo::test(), "work");
приводит к
error: no rules expected the token `::`
|
25 | test_macro!("it", foo::test(), "work");
| ^^
Пример Rust Playground .
Я впервые играю с макросами Rust, поэтому я могу упустить что-то еще.