我有这个代码:
let routes = match env::var("ENV") {
Ok(el) => {
if el == "PROD" {
routes![upload_image]
} else {
routes![get_token, callback, form, upload_image, refresh]
}
},
_ => routes![get_token, callback, form, upload_image, refresh],
};
该函数env::var
返回一个Result<String, VarError>
. 我想知道我上面的代码是否可以简化如下:
let routes = match env::var("ENV") { // E: mismatched types: this expression has type `Result<std::string::String, VarError>
Ok("PROD") => { // E: mismatched types: expected `String`, found `&str`
routes![upload_image]
},
_ => routes![get_token, callback, form, upload_image, refresh],
};
String
但是,我收到有关“不匹配类型:预期,发现”的错误&str
。有没有办法简化这段代码?
String
最简单的解决方案可能是仅使用derefsstr
和 call 的事实Result::as_deref
:您可以使用简单的
if
表达式而不是模式匹配,并用于to_string()
构造Result
可直接比较的值:(或者使用
env::var("ENV").as_deref() == Ok("PROD")
,请参阅其他答案。)通过模式匹配,您还可以使用匹配守卫来避免
to_string()
andas_deref()
: