Rust 无法分配给'x',因为它是借用的

Rust 无法分配给'x',因为它是借用的,rust,Rust,尝试将更多元素推送到向量时出现以下错误。如何克服这个错误 错误[E0506]:无法分配给'x',因为它是借用的 x=格式!(r“\*开始时间*{:?}\S*\S+(?P[a-zA-Z0-9\-\.]+)”,ts); |^^借来的'x'的赋值发生在此处 76 |核心规则指令推送(&x); |--------------“x”的借词出现在这里 | | |借来以后用在这里 代码: 让mut x=String::new(); 对于测试列表中的ts{ x=格式!(r“\*开始时间*{:?

尝试将更多元素推送到向量时出现以下错误。如何克服这个错误

错误[E0506]:无法分配给'x',因为它是借用的
x=格式!(r“\*开始时间*{:?}\S*\S+(?P[a-zA-Z0-9\-\.]+)”,ts);
|^^借来的'x'的赋值发生在此处
76 |核心规则指令推送(&x);
|--------------“x”的借词出现在这里
|         |
|借来以后用在这里
代码:

让mut x=String::new();
对于测试列表中的ts{
x=格式!(r“\*开始时间*{:?}\S*\S+(?P[a-zA-Z0-9\-\.]+)”,ts);
核心规则指令推送(&x);
}

找到了一个解决方案,该解决方案涉及在中泄漏
字符串的内存

但是,有没有更好的方法在不泄漏内存的情况下实现这一点

fn string_to_static_str(s: String) -> &'static str {
    Box::leak(s.into_boxed_str())
}
现在代码是这样的

let mut s = String::new();
    for ts in test_list {
        s = format!(r"\*START TIME*{:?}\S*\s+(?P<Value>[a-zA-Z0-9_\-\.]+)", ts);
        let s: &'static str = string_to_static_str(s);
        core_regex_dict.push(s);  
    }
让mut s=String::new();
对于测试列表中的ts{
s=格式!(r“\*开始时间*{:?}\s*\s+(?P[a-zA-Z0-9\-\.]+)”,ts);
让我们:&'static str=string\u to\u static\u str(s);
核心规则指令推送;
}

很难回答您的问题,因为您没有给我们提供足够的信息。特别是,我们需要知道如何定义
core\u regex\u dict
。我假设
core\u regex\u dict
具有类型
Vec
。您需要将其更改为
Vec

let core_regex_dict=Vec::new();//无需指定项目类型,它将被推断。
//除非需要使用
//之后的最后一个值。。。
对于测试列表中的ts{
设x=format!(r“\*开始时间*{:?}\S*\S+(?P[a-zA-Z0-9\-\.]+)”,ts);
core_regex_dict.push(x);//不`&`->我们推送字符串本身而不是引用
}

我对Rust知之甚少(我不知道为什么要在我的主页上提出这个问题),但是对于可变引用,您不应该使用
&mut x
而不是
$x
吗?x已声明为mut,因此添加&mut x可能会两次显示可变变量的错误。(不知道为什么操作系统会把这个问题放在你的主页上)欢迎使用堆栈溢出!很难回答你的问题,因为它没有包含一个。我们无法说出代码中存在哪些板条箱(及其版本)、类型、特征、字段等。如果您试图重现您的错误(如果可能的话),或者在全新的货运项目中,那么我们将更容易帮助您,然后您的问题将包括附加信息。您可以使用以下方法减少在此处发布的原始代码。谢谢欢迎来到堆栈溢出!看起来你的问题可能会由你的答案来回答。如果没有,请回答您的问题以解释差异。否则,我们可以将此问题标记为已回答;等
let mut s = String::new();
    for ts in test_list {
        s = format!(r"\*START TIME*{:?}\S*\s+(?P<Value>[a-zA-Z0-9_\-\.]+)", ts);
        let s: &'static str = string_to_static_str(s);
        core_regex_dict.push(s);  
    }
let core_regex_dict = Vec::new(); // No need to specify the item type, it will be inferred.
// No need to declare `x` before the loop unless you need to use the 
// last value afterward...
for ts in test_list {
    let x = format!(r"\*START TIME*{:?}\S*\s+(?P<Value>[a-zA-Z0-9_\-\.]+)", ts);
    core_regex_dict.push (x);  // No `&` -> we push the String itself instead of a reference
}