Rust 使用换行符的调试特性实现
鉴于以下计划:Rust 使用换行符的调试特性实现,rust,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); } 我得到以下输出: "\nA\n" 是否有可能将这些换行符“翻译”成真正的换行符
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);
}
我得到以下输出:
"\nA\n"
是否有可能将这些换行符“翻译”成真正的换行符?不幸的是,我不能使用显示
特性,因为这是用于显示错误消息时使用调试
特性的。而不是使用宏。通过查看文档,write代码>直接写入缓冲区,而格式化
创建一个字符串
,并将参数格式化为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);
}
是解开你谜团的真正方法:
use std::fmt;
struct A;
impl fmt::Debug for A {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
fmt::Display::fmt(&format!("\nA\n"), f)
}
}
fn main() {
println!("{:?}", A);
}
当然,答案用写代码>在最后运行时更简单,但它不能解释出现问题的原因。您调用的fmt
是String
上的Debug::fmt
,它会转义这样的特殊字符。字符串不会自动转义字符。@Shepmaster更新以澄清。