在读《Rust 权威指南》 19 章的时候遇到个地方不明白
fn main() {
let poiintt: Point = Point { x: 10, y: 20 };
println!("{}", poiintt.outline_print ());
}
#[derive(Debug, PartialEq)]
struct Point { x: i32, y: i32 }
trait OutlinePrint: fmt::Display {
fn outline_print(&self) {
let output = self.to_string();
let len = output.len();
println!("{}", "*".repeat(len + 4));
println!("*{}*", " ".repeat(len + 2));
println!("* {} *", output);
println!("*{}*", " ".repeat(len + 2));
println!("{}", "*".repeat(len + 4));
}
}
impl fmt::Display for Point {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
write!(f, "({}, {})", self.x, self.y)
}
}
impl OutlinePrint for Point {}
main 函数 里面 println! 还是需要在花括号里面加上 {:?} ,可是 Display 已经实现了呀
error[E0277]: `()` doesn't implement `std::fmt::Display`
--> src\main.rs:7:20
|
7 | println!("{}", poiintt.outline_print());
| ^^^^^^^^^^^^^^^^^^^^^^^ `()` cannot be formatted with the default formatter
|
= help: the trait `std::fmt::Display` is not implemented for `()`
= note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
= note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info)
编译器提示这个,是因为我的这个 outline_print 没有返回值的原因吗?
1
共 3 条评论, 1 页
评论区
写评论应该是直接 打印变量就行了,out 那个方法没有返回值
好的我知道了
--
👇
苦瓜小仔: 你打印的并不是 Point 类型的值。
报错已经清晰地告诉你 () 没有实现 Display。
而你调用的 outline_print 方法返回 ()。
你打印的并不是 Point 类型的值。
报错已经清晰地告诉你 () 没有实现 Display。
而你调用的 outline_print 方法返回 ()。