使用换行符调试特征实现

ujh*_*ujh 3 rust

鉴于以下计划:

use std::fmt;

struct A;

impl fmt::Debug for A {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        format!("\nA\n").fmt(f)
    }
} 

fn main() {
    println!("{:?}", A);
}
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

"\nA\n"
Run Code Online (Sandbox Code Playgroud)

是否有可能将这些换行符"翻译"成真正的换行符?不幸的是我不能使用这个Display特性,因为这是用于在显示错误消息时使用特征的hamcrest-rustDebug.

XAM*_*cky 7

而不是format!使用write!宏.从查看文档,write!直接写入缓冲区,同时format!创建一个String,并格式化fmt::Debug自动转义特殊字符的参数.

use std::fmt;

struct A;

impl fmt::Debug for A {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "\nA\n")
    }
} 

fn main() {
    println!("{:?}", A);
}
Run Code Online (Sandbox Code Playgroud)