Rust 如何从if语句中的函数中获取值

Rust 如何从if语句中的函数中获取值,rust,Rust,如果用户提供一些信息,我试图避免运行函数 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(); l

如果用户提供一些信息,我试图避免运行函数

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);
}
如果app.is\u present存在,我希望代码只运行
best\u server
。 为什么在if语句中指定“best”会导致以下错误:

-->src/main.rs:80:35
|  
80 |让dl=server::download(best.id.as_str(),bytes).unwrap();
|^^^^^在此作用域中找不到

使用
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
语句内部应该发生什么?(
如果app.u存在(…)
)它是否应该返回某个内容或执行某个操作?看起来您正试图将其赋值或从函数返回,但这两件事您都没有做。你能给我们看一下你的全部代码吗?我想知道您的格式是否已调整,并且
let dl=…
行不是我们认为的位置…如果app.is\u present(…)应该在app.is\u present存在时分配一个值,如果app.is\u present不存在,则运行一个函数并获取一些值。我将使用更新进行编辑。请提供更新。如果不调用
server::best\u server
,那么
best
应该来自哪里?best来自用户。当用户通过子命令参数提供服务器号时。github可用