S-JIS[2025-02-01] 変更履歴

Rust Debugトレイト

Ruststd::fmt::Debugのメモ。


概要

Debugトレイトは、デバッグ用の文字列を取得する為のトレイト

use std::fmt::Debug;

Debugトレイトを実装すると、println!マクロ等で"{:?}"によって出力できるようになる。


#[derive(Debug)]属性

Debugトレイトは、#[derive(Debug)]属性によって実装を生成することが出来る。

#[derive(Debug)]
struct MyStruct {
    value1: i32,
    value2: i32,
}

fn main() {
    let value = MyStruct {
        value1: 123,
        value2: 456,
    };

    println!("{:?}", value);
}

↓実行結果

MyStruct { value1: 123, value2: 456 }

Debugトレイトの実装例

Debugトレイトを独自に実装する例。

struct MyStruct {
    value1: i32,
    value2: i32,
}

impl std::fmt::Debug for MyStruct {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        f.debug_struct("MyStruct")
            .field("value1", &self.value1)
            .field("value2", &self.value2)
            .finish()
    }
}

fieldメソッドの呼び出しを削れば、不要な値を出力しないことが出来る。

↓実行結果

MyStruct { value1: 123, value2: 456 }

Displayトレイトと同じ文字列を返す例

DebugトレイトからDisplayトレイトと同じ文字列を返す方法。

impl std::fmt::Debug for MyStruct {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "{}", self)
    }
}

Displayトレイトを実装している場合、println!マクロ等で"{}"による出力が出来るので、それを利用する。


stdへ戻る / Rustへ戻る / 技術メモへ戻る
メールの送信先:ひしだま