创建自定义彩色 dbg! Rust 中的宏
Creating a Custom Colored dbg! Macro In Rust
我想创建一个类似于标准 dbg! macro, but with the option to use colors via the colored crate 的自定义宏。 DBG!通常打印格式为
的东西
[path_to_file:line_number] "symbol name" = "symbol value"
//[src/gallery/image_slot.rs:231] "my_integer_value_of_12" = "12"
- 如何访问 path/line 号码
[path_to_file:line_number]
以便打印?
- 如何访问变量的符号名称? (即打印
my_var
给定 my_var = 12
)
- 使用
file!
, line!
, and column!
宏。
- 使用
stringify!
宏。
如果你去看dbg!
macro, you can click [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 -
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);
}
输出如下:
我想创建一个类似于标准 dbg! macro, but with the option to use colors via the colored crate 的自定义宏。 DBG!通常打印格式为
的东西[path_to_file:line_number] "symbol name" = "symbol value"
//[src/gallery/image_slot.rs:231] "my_integer_value_of_12" = "12"
- 如何访问 path/line 号码
[path_to_file:line_number]
以便打印? - 如何访问变量的符号名称? (即打印
my_var
给定my_var = 12
)
- 使用
file!
,line!
, andcolumn!
宏。 - 使用
stringify!
宏。
如果你去看dbg!
macro, you can click [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 -
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);
}
输出如下: