我正在学习我在Rust上发现的一些教程,并且遇到了我的Java/C/C++头脑无法理解的东西:
impl fmt::Display for Matrix {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "({}, {})\n({}, {})", self.0, self.1, self.2, self.3)
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白write!宏调用结束时缺少分号.如果我添加它,我会从编译器中收到错误.我猜测如果分号不存在则将Resultfrom write!用作返回值fmt,但任何人都可以提供更具体的解释,为什么会这样,如果它总是适用?
的write宏使用write_fmt()无论是从方法std::fmt::Write或从std::io::Write; 两者都返回Result<(), Error>,你需要省略分号,以便将它作为输出fmt().
来自The Rust Book,第1版:
Rust函数只返回一个值,并在"箭头"后面声明类型,这是一个破折号( - )后跟一个大于号(>).函数的最后一行确定它返回的内容.你会注意到这里没有分号.如果我们添加它,我们会得到一个错误.
这揭示了关于Rust的两个有趣的事情:它是一种基于表达式的语言,而分号与其他"基于大括号和分号"的语言中的分号不同.