Rust 如何返回使用for循环创建的向量?

Rust 如何返回使用for循环创建的向量?,rust,Rust,我想使用for循环创建一些数据。我过去常这样做 struct消息>{ 让mut result=vec![]; 对于0..10中的x{ push(消息{msg:format!(“{}”,x).trim()}); } 后果 } fn main(){ loop_函数(); } 但当我试图编译这个时,我得到了与x的生存期相关的以下错误 src/main.rs:8:33:8:49错误:借用的值寿命不够长 src/main.rs:8 result.push(消息{msg:format!(“{}”,x).t

我想使用for循环创建一些数据。我过去常这样做

struct消息>{
让mut result=vec![];
对于0..10中的x{
push(消息{msg:format!(“{}”,x).trim()});
}
后果
}
fn main(){
loop_函数();
}
但当我试图编译这个时,我得到了与
x
的生存期相关的以下错误

src/main.rs:8:33:8:49错误:借用的值寿命不够长
src/main.rs:8 result.push(消息{msg:format!(“{}”,x).trim()});
^~~~~~~~~~~~~~~~
src/main.rs:5:44:11:2注:引用必须在5:43块上定义的生命周期“a”内有效。。。
src/main.rs:5 fn循环函数>{
src/main.rs:6让mut result=vec![];
src/main.rs:7表示0..10中的x{
src/main.rs:8 result.push(消息{msg:format!(“{}”,x).trim()});
src/main.rs:9}
src/main.rs:10结果
...
src/main.rs:8:6:8:60注:……但借用值仅对8:5的语句有效
src/main.rs:8 result.push(消息{msg:format!(“{}”,x).trim()});
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SRC/main:RS:8:6:8:60帮助:考虑使用“让”绑定来增加其生命周期。
src/main.rs:8 result.push(消息{msg:format!(“{}”,x).trim()});
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
错误:由于上一个错误而中止
有没有办法延长生存期
x
,以便我可以返回向量?

I。这是不可能的。链接中的答案有一个很好的解释。我的解决方案是返回一个
字符串

struct Message {
    msg: String
}

fn loop_function() -> Vec<Message> {
    let mut result = vec![];
    for x in 0..10 {
        result.push(Message { msg: format!("{}", x).trim().to_string() });
    }
    result
}

fn main() {
    loop_function();
}
struct消息{
msg:String
}
fn loop_function()->Vec{
让mut result=vec![];
对于0..10中的x{
push(消息{msg:format!(“{}”,x).trim().to_string()});
}
后果
}
fn main(){
loop_函数();
}

虽然答案和示例代码都是正确的,但我想指出,
x
是一个整数,其字符串表示形式不可能包含空格。因此,
trim()
是多余的,您可以直接调用
to_string()
on
x
上的
消息{msg:x.to_string()}
。这样可以节省额外的分配。这一点很好,尽管我猜是这样的(因为OP将其存储在一个名为
的消息中
)OP试图生成的实际代码不仅仅涉及整数。我最初认为编译错误是因为我试图从该方法返回一个结构。但事实似乎并非如此,错误是因为结构中使用了&str。不用担心:)“重复”问题并不是天生的“坏”或其他问题(与大多数其他密切相关的原因相反),只是将所有问题重新定向到一个问题上有助于集中精力构建伟大的答案。