Rust顯示

Rust 顯示/Display

fmt::Debug 難以看起來緊湊和清潔,因此它通常是有利的定製的輸出的外觀。 這是通過 [fmt::Display](http://doc.rust-lang.org/std/fmt/)使用 {} 打印標記手動執行完成。實現它看起來像這樣:

// Import (via `use`) the `fmt` module to make it available.
use std::fmt;

// Define a structure which `fmt::Display` will be implemented for. This is simply
// a tuple struct containing an `i32` bound to the name `Structure`.
struct Structure(i32);

// In order to use the `{}` marker, the trait `fmt::Display` must be implemented
// manually for the type.
impl fmt::Display for Structure {
    // This trait requires `fmt` with this exact signature.
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        // Write strictly the first element into the supplied output
        // stream: `f`. Returns `fmt::Result` which indicates whether the
        // operation succeeded or failed. Note that `write!` uses syntax which
        // is very similar to `println!`.
        write!(f, "{}", self.0)
    }
}

fmt::Display 可以比 fmt::Debug 更乾淨,但是這給 std 庫帶來的一個問題。 應該如何將不明確類型顯示?例如,如果 std 庫爲所有Vec<T> 實現一個單一的風格,那麼它應該是什麼風格?這兩種還是一種?

  • Vec<path>/:/etc:/home/username:/bin (使用 : 分隔)
  • Vec<number>1,2,3  (使用 :分隔)

沒有,因爲沒有理想的風格爲所有類型使用,std 庫並不自己支配。fmt::Display 沒有爲Vec*或任何其它通用的容器實現。 *fmt::Debug 必須用這些通用類型。

因爲任何新的容器類型的一個問題是不能通用, 但 fmt::Display 可以實現。