Özel Renkli DBG Oluşturmak! Pas Makro
Jan 20 2021
Standart dbg'ye benzer özel bir makro oluşturmak istiyorum ! makro , ancak renkli kasa üzerinden renkleri kullanma seçeneği ile . dbg! genellikle şu formatta bir şeyler yazdırır:
[path_to_file:line_number] "symbol name" = "symbol value"
//[src/gallery/image_slot.rs:231] "my_integer_value_of_12" = "12"
- Yol / satır numarasına nasıl erişebilirim,
[path_to_file:line_number]böylece yazdırabilirim? - Bir değişkenin sembol adına nasıl erişirim? (yani
my_varverilen baskımy_var = 12)
Yanıtlar
5 vallentin Jan 20 2021 at 02:00
- Kullanın file!, line!ve column!makro.
- stringify!Makroyu kullanın .
dbg!Makronun dokümanlarına giderseniz , aşağıdaki gibi uygulanmasını gösteren [src] 'yi tıklayabilirsiniz 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)),+,)
};
}
Bunu kullanarak, önerdiğiniz sandıkla kolayca benzer bir colored_dbg!makro oluşturabiliriz .colored
(Basit bir örnek için rastgele renkler seçtim)
// 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)),+,)
};
}
Tıpkı aşağıdakileri nasıl kullanabileceğiniz gibi kullanırsınız dbg!:
fn main() {
let my_var = 12;
colored_dbg!(&my_var);
let v = vec!["foo", "bar", "baz"];
let v = colored_dbg!(v);
}
Aşağıdakileri çıkarır:
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'