有没有办法让这个矢量的切片持续足够长的时间,以便我可以在这种圆形结构中使用它们?
fn populate_chain(file_path: &str) -> HashMap<String, HashSet<&String>> {
println!("loading...");
let time = util::StopWatch::new();
let mut words = HashMap::new();
{
let f = |mut x: Vec<String>| {
let word = x.pop().unwrap();
words.insert(word, HashSet::new());
};
Csv::process_rows(f, file_path, "\t");
}
let col: Vec<(String, HashSet<&String>)> = words.clone().into_iter().collect();
let m: usize = col.len() - 1;
for i in 0..m {
let ref k: String = col[i].0;
for j in i..m {
let ref nk: String = col[j].0;
if check_link(k, nk) {
words.get_mut(k).unwrap().insert(nk);
words.get_mut(nk).unwrap().insert(k);
}
}
}
time.print_time();
words
}
我正在使用double for循环将相关的单词链接在一起,以便以后可以快速查找。
以下是编译器错误......
error: `col` does not live long enough
--> src/main.rs:28:29
|
28 | let ref k: String = col[i].0;
| ^^^ does not live long enough
...
40 | }
| - borrowed value only lives until here
|
note: borrowed value must be valid for the anonymous lifetime #1 defined on the block at 13:72...
--> src/main.rs:13:73
|
13 | fn populate_chain(file_path: &str) -> HashMap<String, HashSet<& String>>{
| ^
error: `col` does not live long enough
--> src/main.rs:30:34
|
30 | let ref nk: String = col[j].0;
| ^^^ does not live long enough
...
40 | }
| - borrowed value only lives until here
|
note: borrowed value must be valid for the anonymous lifetime #1 defined on the block at 13:72...
--> src/main.rs:13:73
|
13 | fn populate_chain(file_path: &str) -> HashMap<String, HashSet<& String>>{
|
答案 0 :(得分:0)
我可以从你的函数签名中告诉你,尝试编写这个函数会遇到很大的问题,至少如果你希望它在结果中包含非空的fn populate_chain(file_path: &str) -> HashMap<String, HashSet<&String>>
。
fn populate_chain<'a>(file_path: &'a str) -> HashMap<String, HashSet<&'a String>>
此函数签名中包含引用;他们已经过了一生。如果你将推断的生命周期显式化,它将如下所示:
'a
换句话说:这个函数声称,给定一些带有生命周期String
的字符串切片,它会返回一个包含'a
个生命周期为String
的对象的集合。
但是你无法在代码中分配这样的HashSet
个对象。 :(
所以,你被困住了;无论你将什么放入函数体,你都无法提供一个返回与TypedArena
s相关的非平凡结果的实现。
然而,一切都不会丢失。例如,您可以修改您的函数,以便它还可以将具有适当生命周期的HashSet<String>
作为附加参数,然后在那里分配字符串。另一个(更简单)选项是使用HashSet<&String>
而不是$.post(chrome.extension.getURL('get_image.php'), { username: 'user' }, function(result) {
console.log(result);
});
...