gpt4 book ai didi

rust - 创建自定义彩色 dbg! Rust 中的宏

转载 作者:行者123 更新时间:2023-12-03 11:24:44 30 4
gpt4 key购买 nike

我想创建一个类似于标准的自定义宏 dbg! macro ,但可以选择通过 colored 使用颜色箱。 dbg!通常以以下格式打印一些东西

[path_to_file:line_number] "symbol name" = "symbol value"
//[src/gallery/image_slot.rs:231] "my_integer_value_of_12" = "12"
  • 如何访问路径/行号 [path_to_file:line_number]所以我可以打印吗?
  • 如何访问变量的符号名称? (即打印 my_var 给定 my_var = 12 )
  • 最佳答案

  • 使用 file! , line! , 和 column! 宏。
  • 使用 stringify! 宏。

  • 如果您转到 dbg! 的文档宏,可以点击 [src] ,显示了 dbg! 的实现, 如下:
    macro_rules! dbg {
    () => {
    $crate::eprintln!("[{}:{}]", $crate::file!(), $crate::line!());
    };
    ($val:expr $(,)?) => {
    // Use of `match` here is intentional because it affects the lifetimes
    // of temporaries - https://stackoverflow.com/a/48732525/1063961
    match $val {
    tmp => {
    $crate::eprintln!("[{}:{}] {} = {:#?}",
    $crate::file!(), $crate::line!(), $crate::stringify!($val), &tmp);
    tmp
    }
    }
    };
    ($($val:expr),+ $(,)?) => {
    ($($crate::dbg!($val)),+,)
    };
    }

    使用它,我们可以轻松创建一个类似的 colored_dbg!宏,带有 colored crate正如你所建议的。
    (我只是选择了随机颜色,举个简单的例子)
    // colored = "2.0"
    use colored::Colorize;

    macro_rules! colored_dbg {
    () => {
    eprintln!("{}", format!("[{}:{}]", file!(), line!()).green());
    };
    ($val:expr $(,)?) => {
    match $val {
    tmp => {
    eprintln!("{} {} = {}",
    format!("[{}:{}]", file!(), line!()).green(),
    stringify!($val).red(),
    format!("{:#?}", &tmp).blue(),
    );
    tmp
    }
    }
    };
    ($($val:expr),+ $(,)?) => {
    ($(colored_dbg!($val)),+,)
    };
    }
    您可以像使用 dbg! 一样使用它:
    fn main() {
    let my_var = 12;
    colored_dbg!(&my_var);

    let v = vec!["foo", "bar", "baz"];
    let v = colored_dbg!(v);
    }
    输出以下内容:
    screenshot

    关于rust - 创建自定义彩色 dbg! Rust 中的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65797610/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com