我正在关注我在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)
}
}
我不明白write!
宏调用结束时缺少分号。如果我添加它,我会从编译器中收到错误。
我猜测如果分号不在那里,那么来自Result
的{{1}}被用作write!
的返回值,但任何人都可以提供更具体的解释,为什么会这样,如果是总是适用?
答案 0 :(得分:5)
write
宏使用来自std::fmt::Write
或来自std::io::Write
的write_fmt()
方法;两者都返回Result<(), Error>
,你需要省略分号才能将它作为fmt()
的输出。
来自The Rust Book,第1版:
Rust函数只返回一个值,并声明类型 在'箭头'之后,这是一个破折号( - )后跟一个大于号的符号 (大于)。函数的最后一行确定它返回的内容。你会 注意这里没有分号。如果我们添加它,我们会 得到一个错误。
这揭示了关于Rust的两个有趣的事情:它是一个 基于表达式的语言和分号不同 其他“基于大括号和分号”的语言中的分号。