fn longest<'a>(x: &'a str, y: &'a str) -> &'a str { // what this is doing is basically tagging x and y and the // result with the same 'a, telling rust not to let any // of them expire before the others; that way nothing // will go out of scope prematurely and the result will // always have a non-null reference // basically, 'a gives all three values the same lifetime. // so long as they're all alive at the same time, there are // no reference errors // note that the lifetime selected for the result is // equal to the smaller of the lifetimes of the // parameters if x.len() > y.len() { x } else { y } } struct ImportantExcerpt<'a> { part: &'a str, } fn main() { let string1 = String::from("abcd"); { let string2 = "xyz"; let result = longest(string1.as_str(), string2); //dbg!(result); } let script = String::from("Before time began, there was the cube. We know not where it comes from."); let first_sentence = script.split('.') .next() .expect("Could not find a '.'"); let i = ImportantExcerpt { part: first_sentence }; dbg!(i.part); }