我正在尝试解析环境值;使用std::env如下
let environment = env::var("APP_ENV").unwrap();
Run Code Online (Sandbox Code Playgroud)
这将向变量返回一个字符串environment。如果我想传递默认值,那么我必须使用下面的代码
let environment = env::var("APP_ENV").unwrap_or("development".into());
Run Code Online (Sandbox Code Playgroud)
但我期待这样做
let environment = env::var("APP_ENV").unwrap_or("development");
Run Code Online (Sandbox Code Playgroud)
正如 Rust示例中提到的
但随后显示错误String expected but found &str
为什么示例代码中没有发生该错误?
tl;drerror[E0716]: temporary value dropped while borrowed是一个困难且常见的问题,有一致的解决方案吗?
我遇到了困难的 rustc 错误
error[E0716]: temporary value dropped while borrowed
...
creates a temporary which is freed while still in use
Run Code Online (Sandbox Code Playgroud)
搜索Stackoverflow,有很多关于这个rust error的问题error[E0716]。
也许 Rust 专家可以为这个常见的新手问题提供一个通用的解决方案,一个足够好的解决方案,它也可以回答链接的问题(见下文)。
一个简洁的代码示例来演示该问题(Rust Playground):
type Vec1<'a> = Vec::<&'a String>;
fn fun1(s1: &String, v1: &mut Vec1) {
v1.insert(0, &s1.clone());
}
fn main() {
let mut vec1 = Vec::new();
let str1 = String::new();
fun1(&str1, &mut vec1);
}
Run Code Online (Sandbox Code Playgroud)
结果:
error[E0716]: temporary value dropped while borrowed
--> …Run Code Online (Sandbox Code Playgroud) 我发现这可以编译:
let x = &mut 10;
*x = 20;
Run Code Online (Sandbox Code Playgroud)
这非常令人困惑。可变借用文字的语义是什么?
我来自C ++,在编译器中绝对不允许我这样引用右值:
let x = &mut 10;
*x = 20;
Run Code Online (Sandbox Code Playgroud) 通常,特定值只有一个所有者(除了 之类的Rc<T>)。4那么,由于变量myVar是从某个东西借来的,那么下面这个值的所有者是谁呢?我想知道那是什么东西。
let myVar = &4;
Run Code Online (Sandbox Code Playgroud)