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可用