デバッグを支援するために作成するほとんどの構造体については、#[derive(Debug)]
には良い習慣と考えられます。しかし、構造体にDebug
のない型がある場合、これは不可能です。しかし、もしその特性が私のコントロール下にあるのであれば、デバッグメッセージにその特性の実装をユーザーに表示させるためにできることはありますか?どのようにしてデフォルトのデバッグ実装を提供しますか?
私は私の形質を実装する人もDebug
を実装することを必要とすることが、私はその任意の要件を追加する必要が好きではない:
trait MyTrait: Debug { ... }
を私はちょうど私の形質についてDebug
を実現することができます。
trait MyTrait { ... }
impl Debug for MyTrait {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
write!(f, "MyTrait {{ ... }}")
}
}
を
これは、実装がDebug
をオーバーライドすることを許可しません。これは、関数が仮想ではないかのようです。どうすればこの作品を作れますか?
use std::fmt;
use std::fmt::{ Formatter, Debug };
#[derive(Debug)]
struct A {
a: Box<Data>,
}
trait Data {}
impl Debug for Data {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
write!(f, "Data{{ ... }}")
}
}
#[derive(Debug)]
struct B(i32);
impl Data for B {}
fn main() {
let a = A{ a: Box::new(B(42)) };
println!("{:?}", a);
}
出力:
A { a: Data{ ... } }
私が欲しいもの:
A { a: B(42) }
B
がDebug
を実装していないとき、私は最初の出力をしたいです。
[特性に親形質を実装する](https://github.com/rust-lang/rfcs/issues/1024)のようなサウンドは、あなたの特性のためのデフォルトのインプットである 'Debug' 。 – Lukazoid