Fmt::Display 'Cleaner' 与 Fmt::Debug 相比如何?
How is Fmt::Display 'Cleaner' than Fmt::Debug?
所以我目前正在开始使用 Rust,并且正在通读 Rust By Example。
一边做练习,一边玩代码。
但是在 RBE Display 函数描述中,它把 Fmt::Display 描述为 'cleaner' 而不是 Fmt::Debug。
这怎么样?在我看来,您必须做更多的工作,编写更多的代码来尝试让 Fmt::Display 工作,而 Fmt::Debug 马上就能工作?
我是不是对 'Cleaner' 代码有什么误解,还是打字错误?
Display 的 output 通常比 Debug 的更清晰,而不是实现它的代码。 Debug 的输出旨在用于调试目的,提供更明确的输出。 Display 的输出是面向用户的输出,所以它高度依赖于你的结构的含义,这就是为什么它无法导出。
例如,考虑以下代码:
fn main() {
// Note that \t is the TAB character
let output = "N\tO\tI\tC\tE";
println!("Debug: {:?}", output);
println!("Display: {}", output);
}
它将输出:
Debug: "N\tO\tI\tC\tE"
Display: N O I C E
在这种情况下,Debug 将显示 str(文本)包含的字符(因为它在调试时更有用),而 Display 将只打印它们。
所以我目前正在开始使用 Rust,并且正在通读 Rust By Example。
一边做练习,一边玩代码。
但是在 RBE Display 函数描述中,它把 Fmt::Display 描述为 'cleaner' 而不是 Fmt::Debug。
这怎么样?在我看来,您必须做更多的工作,编写更多的代码来尝试让 Fmt::Display 工作,而 Fmt::Debug 马上就能工作?
我是不是对 'Cleaner' 代码有什么误解,还是打字错误?
Display 的 output 通常比 Debug 的更清晰,而不是实现它的代码。 Debug 的输出旨在用于调试目的,提供更明确的输出。 Display 的输出是面向用户的输出,所以它高度依赖于你的结构的含义,这就是为什么它无法导出。
例如,考虑以下代码:
fn main() {
// Note that \t is the TAB character
let output = "N\tO\tI\tC\tE";
println!("Debug: {:?}", output);
println!("Display: {}", output);
}
它将输出:
Debug: "N\tO\tI\tC\tE"
Display: N O I C E
在这种情况下,Debug 将显示 str(文本)包含的字符(因为它在调试时更有用),而 Display 将只打印它们。