我想创建一个宏来检查提供的bool的值,并根据该值返回一个字符串。我试过这个:
macro_rules! dbg_bool{
() => {};
($val:expr $(,)?) => {
match $val {
//if $val is true return a green string
$($val == true) => {
"it was true".green()
}
//if $val is false return a red string
$($val == false) =>{
"it was false".red()
}
}
};
($($val:expr),+ $(,)?) => {
($(dbg_bool!($val)),+,)
};
}但这给了我一个错误:
error: expected one of: `*`, `+`, or `?`
--> src/macros.rs:28:32
|
28 | $($val == true) => {
| ________________________________^
29 | | "it was true".green()
30 | | }
| |_____________^使用相等运算符来比较宏中的$var的正确方法是什么?
发布于 2021-01-30 11:01:27
宏中的match语法不变:
macro_rules! dbg_bool{
() => {};
($val:expr $(,)?) => {
match $val {
//if $val is true return a green string
true => {
"it was true".green()
}
//if $val is false return a red string
false => {
"it was false".red()
}
}
};
($($val:expr),+ $(,)?) => {
($(dbg_bool!($val)),+,)
};
}顺便说一句,在使用宏时,假设提供green和blue的特征在作用域内。为了健壮性,你要么像::colored::Colorize::green("it was true")那样显式地调用它,要么将match包装在一个块中,这样你就可以添加一个use ::colored::Colorize; (假设你使用的是colored机箱)。在playground上查看这两个选项。
发布于 2021-01-30 11:01:08
你只是在$val上匹配,没有特殊的语法。
macro_rules! dbg_bool{
() => {};
($val:expr $(,)?) => {
match $val {
true => {
"it was true"
}
false =>{
"it was false"
}
}
};
($($val:expr),+ $(,)?) => {
($(dbg_bool!($val)),+,)
};
}https://stackoverflow.com/questions/65964016
复制相似问题