rust - 为什么在 rust 函数的末尾 Ok(()) 之后没有分号?
问题描述
取自current_dir文档的代码片段:
use std::env;
fn main() -> std::io::Result<()> {
let path = env::current_dir()?;
println!("The current directory is {}", path.display());
Ok(())
}
我注意到,仅在 之后添加分号Ok(())
,程序无法编译并出现以下错误:
error[E0308]: mismatched types
expected enum `std::result::Result`, found `()`
这是为什么?
解决方案
Rust 返回最后一个表达式的值。当你在 后面加上分号Ok(())
时,最终的表达式变成了一个语句,所以它返回了语句的“值”,也就是缺少值,也称为unit
(称为“()”)。
这个问题也在这里问和回答:Rust 中分号是可选的吗?
rust 文档中的表达式:https ://doc.rust-lang.org/stable/rust-by-example/expression.html
推荐阅读
- pdf - 将 Google 表格下载为 PDF 时,Shruti (Gujarati) 字体会发生变化
- angular - Angular Kendo 网格字段名称给出警告“网格字段名称不是有效标识符”
- regex - 正则表达式固定数量的数字和固定数量的空格
- javascript - 如何使用 Vuejs 将多个图像添加到 Firebase 实时数据库?
- html - 如何解决物化模式问题
- android - Android Studio 自定义微调器布局
- python - ttk checkbutton 默认不取消选中
- javascript - 未找到 ID 未定义的自定义时间栏 - Vis js(更新到当前版本时)
- visual-studio - Visual Studio 的 vcvars64.bat 的可靠路径
- php - Angular httpClient使用经度纬度Haversine公式从JSON数组中获取用户