首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从if语句内的函数中获取值

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

Stack Overflow用户
提问于 2019-05-10 01:57:43
回答 1查看 342关注 0票数 -1

如果用户提供了一些信息,我会尽量避免运行函数。

代码语言:javascript
复制
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_present存在的情况下才运行best_server。为什么在if语句中赋值"best“会以下面的错误结束:

代码语言:javascript
复制
 --> src/main.rs:80:35
   |  
80 |         let dl = server::download(best.id.as_str(), bytes).unwrap();  
   |                                   ^^^^ not found in this scope  
EN

回答 1

Stack Overflow用户

发布于 2019-05-10 09:28:40

使用let关键字时,将在语句出现的范围内声明给定变量。作用域从封闭的左大括号{开始,到封闭的右大括号}结束。

所以这就是:

代码语言:javascript
复制
if app.is_present("Server") {
    let best = app.value_of("Server").unwrap();
}

声明了一个变量best,但该变量在右大括号后不存在。这就是为什么你得到的错误提示变量不存在。

解决这个问题的一种方法是利用if语句有一个值的事实:所选分支中最后一个表达式的值。所以你可以说:

代码语言:javascript
复制
let best = if app.is_present("Server") {
    app.value_of("Server").unwrap()
} else {
    server::best_server("3").unwrap().to_owned().id.as_str()
};

请注意,if语句分支中的表达式末尾缺少;。如果那里有分号,那么表达式的值就不会被赋值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56065089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档