Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust宏中bool的检查值_Rust_Macros_Rust Macros - Fatal编程技术网

Rust宏中bool的检查值

Rust宏中bool的检查值,rust,macros,rust-macros,Rust,Macros,Rust Macros,我想创建一个宏来检查所提供bool的值,并基于该值返回一个字符串。我试过这个: macro\u规则!dbg_bool{ () => {}; ($val:expr$(,)?)=>{ 匹配$val{ //如果$val为true,则返回一个绿色字符串 $($val==true)=>{ “这是真的” } //如果$val为false,则返回一个红色字符串 $($val==false)=>{ “这是假的” } } }; ($($val:expr),+$(,)?)=>{ ($(dbg_bool!($val)

我想创建一个宏来检查所提供bool的值,并基于该值返回一个字符串。我试过这个:

macro\u规则!dbg_bool{
() => {};
($val:expr$(,)?)=>{
匹配$val{
//如果$val为true,则返回一个绿色字符串
$($val==true)=>{
“这是真的”
}
//如果$val为false,则返回一个红色字符串
$($val==false)=>{
“这是假的”
}
}
};
($($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
的正确方法是什么?

只要匹配
$val
,就没有特殊语法

macro\u规则!dbg_bool{
() => {};
($val:expr$(,)?)=>{
匹配$val{
真=>{
“这是真的”
}
假=>{
“这是假的”
}
}
};
($($val:expr),+$(,)?)=>{
($(dbg_bool!($val)),+,)
};
}

只要匹配
$val
,就没有特殊的语法

macro\u规则!dbg_bool{
() => {};
($val:expr$(,)?)=>{
匹配$val{
真=>{
“这是真的”
}
假=>{
“这是假的”
}
}
};
($($val:expr),+$(,)?)=>{
($(dbg_bool!($val)),+,)
};
}

宏中的
匹配
语法不变:

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)),+,)
    };
}

另一方面,当您使用宏时,您假设赋予您的
绿色
蓝色
的特征在范围内。对于健壮性,您可以像
::colored::Colorize::green(“它是真的”)
那样显式地调用它,或者将
匹配项
包装在一个块中,以便添加
use::Colorize(假设您正在使用板条箱)。请参见上的这两个选项。

宏中的
匹配语法不会更改:

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)),+,)
    };
}

另一方面,当您使用宏时,您假设赋予您的
绿色
蓝色
的特征在范围内。对于健壮性,您可以像
::colored::Colorize::green(“它是真的”)
那样显式地调用它,或者将
匹配项
包装在一个块中,以便添加
use::Colorize(假设您正在使用板条箱)。查看上的这两个选项。

匹配臂周围的
$()
是多余的,但是为什么要匹配
$val
,然后再执行另一个
$val==true
$val==false
检查?是否需要宏?这难道不能用一个正常的函数来完成吗?@kmdreko可以,但是我喜欢用宏来进行所有的调试。匹配臂周围的
$()
是多余的,但是为什么你要匹配
$val
,然后再做一个额外的
$val==true
$val==false
检查?是否需要宏?这不能用普通函数来完成吗?@kmdreko可以,但我喜欢用宏来进行所有调试