Я хочу, чтобы извлечь все названные группы из матча в HashMap, и я бег в «не живет достаточно долго,» ошибку при попытке скомпилировать этот код:Перебор названных групп регулярных выражений в Rust
extern crate regex;
use std::collections::HashMap;
use regex::Regex;
pub struct Route {
regex: Regex,
}
pub struct Router<'a> {
pub namespace_seperator: &'a str,
routes: Vec<Route>,
}
impl<'a> Router<'a> {
// ...
pub fn path_to_params(&self, path: &'a str) -> Option<HashMap<&str, &str>> {
for route in &self.routes {
if route.regex.is_match(path) {
let mut hash = HashMap::new();
for cap in route.regex.captures_iter(path) {
for (name, value) in cap.iter_named() {
hash.insert(name, value.unwrap());
}
}
return Some(hash);
}
}
None
}
}
fn main() {}
Вот результат ошибки:
error: `cap` does not live long enough
--> src/main.rs:23:42
|>
23 |> for (name, value) in cap.iter_named() {
|> ^^^
note: reference must be valid for the anonymous lifetime #1 defined on the block at 18:79...
--> src/main.rs:18:80
|>
18 |> pub fn path_to_params(&self, path: &'a str) -> Option<HashMap<&str, &str>> {
|> ^
note: ...but borrowed value is only valid for the for at 22:16
--> src/main.rs:22:17
|>
22 |> for cap in route.regex.captures_iter(path) {
|> ^
Очевидно, у меня есть еще одно или два, чтобы узнать о Ржавчина жизни.
Благодарим вас за разъяснения по срокам службы. К сожалению, я по-прежнему получаю ту же ошибку с этим новым намеком: примечание: ссылка должна быть действительной для срока службы «b», как определено на блоке в 39:92 ... pub fn path_to_params <'b> (& 'b self, path: &' b str) -> Вариант> { –
eltiare
Нужно ли устанавливать срок действия кепки? Если да, то как мне это сделать? Для циклов кажется более сложным. – eltiare
@eltiare: Обратите внимание, что я не ставил '' b' столько мест, сколько вы. Я оставил его «self» и ключи «HashMap». Разве это не сработало без него? –