एक कस्टम रंगीन dbg बनाना! मैक्रो इन जंग
मैं मानक dbg के समान एक कस्टम मैक्रो बनाना चाहता हूँ ! मैक्रो , लेकिन रंगीन टोकरा के माध्यम से रंगों का उपयोग करने के विकल्प के साथ । 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
)
जवाब
5 vallentin
- का प्रयोग करें 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टोकरा के रूप में आप का सुझाव दिया।
(मैं एक साधारण उदाहरण के लिए यादृच्छिक रंग चुनता हूं)
// 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);
}
जो निम्न आउटपुट देता है: