【Rust学习笔记】ToString
2023-12-21 19:33:36
Rust 中的 ToString 方法
rust中,要实现一个Value的toString方法,需要实现 std::fmt::Display,而不是直接实现 std::string::ToString。
参考:ToString trait
struct Point {
x: i32,
y: i32,
}
impl std::fmt::Display for Point {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "({}, {})", self.x, self.y)
}
}
fn main() {
let p = Point {
x: 1,
y: 2,
};
assert_eq!("(1, 2)", p.to_string());
assert_eq!("p: (1, 2)", format!("p: {}", p));
}
std::fmt::Display 和 std::fmt::Debug 的区别
- Display 是面向用户的一个trait,不能使用 derive
- Debug 是面向程序员调试的一个trait,可以使用 derive,并且derive的Debug是不稳定的,可能随着Rust版本变化。
#[derive(Debug)]
struct Point {
x: i32,
y: i32,
}
fn main() {
let p = Point {
x: 1,
y: 2,
};
assert_eq!("Point { x: 1, y: 2 }", format!("{:?}", p));
assert_eq!("Point { x: 1, y: 2 }", format!("{p:?}"));
assert_eq!("pretty: Point {
x: 1,
y: 2,
}", format!("pretty: {:#?}", p));
assert_eq!("pretty: Point {
x: 1,
y: 2,
}", format!("pretty: {p:#?}"));
}
派生的Debug
一个struct 实现了derive 的 Debug,则其成员也需要实现 Debug。
struct Point {
x: i32,
y: i32,
}
impl Display for Point {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "({}, {})", self.x, self.y)
}
}
impl std::fmt::Debug for Point {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "({}, {})", self.x, self.y)
}
}
#[derive(Debug)]
struct Line {
from: Point,
to: Point,
}
fn main() {
let l = Line {
from: Point { x: 0, y: 0 },
to: Point { x: 1, y: 1 },
};
assert_eq!("l: Line { from: (0, 0), to: (1, 1) }", format!("l: {l:?}"));
}
文章来源:https://blog.csdn.net/u011697278/article/details/135132981
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!