首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rust宏中bool的校验值

Rust宏中bool的校验值
EN

Stack Overflow用户
提问于 2021-01-30 10:19:29
回答 2查看 182关注 0票数 0

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

代码语言:javascript
复制
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)),+,)
    };

}

但这给了我一个错误:

代码语言:javascript
复制
error: expected one of: `*`, `+`, or `?`
  --> src/macros.rs:28:32
   |
28 |               $($val == true) => {
   |  ________________________________^
29 | |                 "it was true".green()
30 | |             }
   | |_____________^

使用相等运算符来比较宏中的$var的正确方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-30 11:01:27

宏中的match语法不变:

代码语言:javascript
复制
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)),+,)
    };
}

顺便说一句,在使用宏时,假设提供greenblue的特征在作用域内。为了健壮性,你要么像::colored::Colorize::green("it was true")那样显式地调用它,要么将match包装在一个块中,这样你就可以添加一个use ::colored::Colorize; (假设你使用的是colored机箱)。在playground上查看这两个选项。

票数 2
EN

Stack Overflow用户

发布于 2021-01-30 11:01:08

你只是在$val上匹配,没有特殊的语法。

代码语言:javascript
复制
macro_rules! dbg_bool{
    () => {};
    ($val:expr $(,)?) => {
        match $val {
            true => {
                "it was true"
            }
            false =>{
                "it was false"
            }
        }
    };
    ($($val:expr),+ $(,)?) => {
        ($(dbg_bool!($val)),+,)
    };
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65964016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档