1
私は錆のコードを持っています。私は仕事をしようとしていますが、どうすればいいか分かりません。工場機能からの錆止め
fn main() {
let names = vec!["foo", "bar", "baz"];
let print = printer(names);
let result = print();
println!("{}", result);
do_other_thing(names.as_slice());
}
fn printer(names: Vec<&str>) -> Box<Fn() -> String> {
Box::new(move || {
let text = String::new();
for name in names {
text = text + name;
}
text
})
}
fn do_other_thing(names: &[&str]) {}
これは、でコンパイル:
error[E0477]: the type `[[email protected]/main.rs:10:14: 16:6 names:std::vec::Vec<&str>]` does not fulfill the required lifetime
--> src/main.rs:10:5
|
10 | Box::new(move || {
| _____^ starting here...
11 | | let text = String::new();
12 | | for name in names {
13 | | text = text + name;
14 | | }
15 | | text
16 | | })
| |______^ ...ending here
|
= note: type must outlive the static lifetime
私は何が起こっているの漠然とした考えを持っています。クロージャがnames
パラメータよりも長く存続する可能性があるようです。私は'static
と注釈を付けることができますが、それは正しいと感じていないし、その場合でも、ベクトルを移動しないようにしてdo_other_thing
が動作するようにします。私は何とかコピーする必要があります。
ありがとうございます!閉鎖の生涯を結びつける+は、まさに私が探していたものでした。 – somnid