Warum lebt die Variable nicht lange genug?

Betrachten Sie diese Funktion, die die Dateierweiterung einer bestimmten Datei zurückgeben sollPath.

pub fn get_extension<'a>(path: &'a Path) -> Option<&'a str> {
    let path_str = path.as_str().unwrap();
    let ext_pos = regex!(".[a-z0-9]+$").find(path_str);

    match ext_pos {
        Some((start, _)) => {
            return Some(path_str.as_slice().slice_from(start))
        },
        None => return None
    }
}

Die Fehlermeldung lautet wie folgt:

`path_str` does not live long enough

Die Fehlermeldung ist ziemlich klar und es ist eine Schande, dass ich es nicht alleine schaffen kann. Ich verstehe es theoretisch, aber es gibt noch ein paar unscharfe Dinge für mich.

Ich verstehe, dass der Compiler mir das sagen willpath_str&nbsp;lebt nicht lange genug, um gültig zu sein, da der Rückgabewert mit mit Lebensdauer markiert ist'a.

Aber hier hört es für mich auf:

Ich verstehe, dass der Verweis aufpath&nbsp;(der Eingabeparameter) sollte genau so lange leben wie der Verweis auf denstr&nbsp;das ist in die eingewickeltOption&nbsp;(der Ausgabeparameter)

da wir zurückkehrenSome(path_str.as_slice().slice_from(start))&nbsp;Ich gehe davon aus, dass das in der Praxis so istpath_str&nbsp;muss so lange leben wiepath.

Was ich nicht verstehe istwarum genau&nbsp;tutpath_str&nbsp;nicht lange genug leben und wie könnte ich das beheben? Was lässt es zu bald sterben?

AKTUALISIEREN

Wie in den Kommentaren und auch im IRC hervorgehoben, das überflüssige entfernenas_slice()&nbsp;Lässt den Code kompilieren. Weiß jemand warum das so ist? Es wurde auch darauf hingewiesen, dass es eineMethode&nbsp;um die verlängerung direkt zu bekommen. Aber ja, ich bin eigentlich mehr daran interessiert, die Geschichte hinter dem Problem zu lernen.