< 返回版块

UQIFVASFG 发表于 2023-01-25 16:00

在读《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 没有返回值的原因吗?

评论区

写评论
PaiGack 2023-01-26 07:54

应该是直接 打印变量就行了,out 那个方法没有返回值

作者 UQIFVASFG 2023-01-25 17:33

好的我知道了

--
👇
苦瓜小仔: 你打印的并不是 Point 类型的值。

报错已经清晰地告诉你 () 没有实现 Display。

而你调用的 outline_print 方法返回 ()。

苦瓜小仔 2023-01-25 17:02

你打印的并不是 Point 类型的值。

报错已经清晰地告诉你 () 没有实现 Display。

而你调用的 outline_print 方法返回 ()。

1 共 3 条评论, 1 页