1.2.1 Debug

std::fmt 형식화 trait을 사용하고자 하는 모든 타입들은 출력하기 위해 구현이 요구된다. std 라이브러리에 있는 타입들처럼 단지 자동 구현이 제공된다. 모든 다른 것들은 반드시 어떻게 할지 수동으로 구현되어야 한다. All types which want to use std::fmt formatting traits require an implementation to be printable. Automatic implementations are only provided for types such as in the std library. All others must be manually implemented somehow.

fmt::Debug trait이 이의 복잡함을 많이 경감해준다. 모든 타입들은 fmt::Debug 구현을 파생(drive)할 수 있다(자동으로 생성). 이는 fmt::Display로는 적합하지 않고 반드시 수동으로 구현되야 한다. The fmt::Debug trait makes this very straightforward. All types can derive (automatically create) the fmt::Debug implementation. This is not true for fmt::Display which must be manually implemented.

/ 이 구조체는 `fmt::Display`나 `fmt::Debug`로는 출력되지 않는다.
// This structure cannot be printed either with `fmt::Display` or
// with `fmt::Debug`
struct UnPrintable(i32);

// `derive` 속성으로 이 `struct`를 `fmt::Debug`로 출력 가능하도록 자동 구현한다.
// The `derive` attribute automatically creates the implementation
// required to make this `struct` printable with `fmt::Debug`.
#[derive(Debug)]
struct DebugPrintable(i32);

모든 std 라이브러리 타입들도 자동으로 {:?}를 통해 출력 가능하다: All std library types automatically are printable with {:?} too:

// Derive the `fmt::Debug` implementation for `Structure`. `Structure`
// is a structure which contains a single `i32`.
#[derive(Debug)]
struct Structure(i32);

// Put a `Structure` inside of the structure `Deep`. Make it printable
// also.
#[derive(Debug)]
struct Deep(Structure);

fn main() {
    // Printing with `{:?}` is similar to with `{}`.
    println!("{:?} months in a year.", 12);
    println!("{1:?} {0:?} is the {actor:?} name.",
             "Slater",
             "Christian",
             actor="actor's");

    // `Structure` is printable!
    println!("Now {:?} will print!", Structure(3));

    // The problem with `derive` is there is no control over how
    // the results look. What if I want this to just show a `7`?
    println!("Now {:?} will print!", Deep(Structure(7)));
}

So fmt::Debug definitely makes this printable but sacrifices some elegance. Manually implementing fmt::Display will fix that.

See also

attributes, derive, std::fmt, and struct

results matching ""

    No results matching ""