Özel Renkli DBG Oluşturmak! Pas Makro
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_var
verilen baskımy_var = 12
)
Yanıtlar
5 vallentin
- 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:
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
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'
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı