rust - 如何从 if 语句中的函数中获取值
问题描述
如果用户提供一些信息,我会尽量避免运行函数。
if let Some(app) = app.subcommand_matches("Download") {
if app.is_present("Server") {
let best = app.value_of("Server").unwrap();
} else {
let best = server::best_server("3").unwrap().to_owned();
let best = best.id.as_str();
};
let bytes = app.value_of("bytes").unwrap_or("100000024");
let dl = server::download(best, bytes).unwrap();
println!("Download Results {:#?} mbps", dl);
}
我希望代码仅best_server
在app.is_present
存在时运行。为什么在 if 语句中分配“最佳”以以下错误结尾:
--> src/main.rs:80:35
|
80 | let dl = server::download(best.id.as_str(), bytes).unwrap();
| ^^^^ not found in this scope
解决方案
当您使用let
关键字时,您是在语句出现的范围内声明给定变量。范围从封闭的左大括号开始,到封闭的右大括号{
结束}
。
所以这:
if app.is_present("Server") {
let best = app.value_of("Server").unwrap();
}
声明了一个变量best
,但该变量在右大括号后不存在。这就是为什么你得到的错误说变量不存在。
解决此问题的一种方法是利用if
语句具有值的事实:所选分支中最后一个表达式的值。所以你可以说:
let best = if app.is_present("Server") {
app.value_of("Server").unwrap()
} else {
server::best_server("3").unwrap().to_owned().id.as_str()
};
请注意 if 语句分支中表达式末尾缺少 a ;
。如果那里有分号,则不会分配表达式的值。
推荐阅读
- java - RegEx - 在 HTML-Anchor 元素中的组之间未捕获的任何内容
- python - 我在代码中做错了什么,通过 Flask 应用程序向 MySQL 提交表单值?
- c# - 为什么我的 android xamarin 应用程序在权限被拒绝时会自动关闭?
- lua - 为什么雾的颜色不会根据 Roblox Studio 中的 ClockTime 变化?
- oauth-2.0 - WSO2:JWTConfiguration 不适用于多租户
- javascript - 在不设置默认值的情况下评估变量
- java - Android 10,huawei mate30,从app跳转到APN设置页面,没有数据!
- javascript - 车轮事件触发多次反应
- java - 当从 SWT Eclipse 中的 FileDialog 中选择了不正确的文件扩展名/格式时,我将如何显示错误消息?
- html - 更改已定义网格内的 div 位置可保留原始布局