如果用户提供一些信息,我试图避免运行某个功能。
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语句中分配“ best”会导致以下错误:
--> src/main.rs:80:35
|
80 | let dl = server::download(best.id.as_str(), bytes).unwrap();
| ^^^^ not found in this scope
答案 0 :(得分:0)
使用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语句内的表达式末尾缺少;
。如果存在分号,则不会分配表达式的值。