gw_rust_programming_tutorial/chapter_10/
test_lifetime.rs1use stdext::function_name;
2use backtrace::Backtrace;
3pub fn test_lifetime_fn()
11{
12 println!("{}",function_name!());
13 let string1 = String::from("abcd");
14 let string2 = "xyz";
15
16 let result = longest(string1.as_str(), string2);
17 println!("The longest string is {}", result);
18
19
20
21 test_struct_ref_member();
22
23 let result = longest_with_an_announcement(string1.as_str(), string2,string2);
24 println!("2The longest string is {}", result);
25
26
27}
28
29fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
38 if x.len() > y.len() {
39 x
40 } else {
41 y
42 }
43}
44
45struct ImportantExcerpt<'a> {
55 part: &'a str,
56}
57
58fn test_struct_ref_member() {
59 let bt = Backtrace::new();
60
61 let novel = String::from("Call me Ishmael. Some years ago...");
62 let first_sentence = novel.split('.')
63 .next()
64 .expect("Could not find a '.'");
65 let i = ImportantExcerpt { part: first_sentence };
66
67 println!("i={}",i.part);
68
69
70 println!("{:?}", bt);
71}
72
73use std::fmt::Display;
75
76fn longest_with_an_announcement<'a, T>(x: &'a str, y: &'a str, ann: T) -> &'a str
77 where T: Display
78{
79 println!("Announcement! {}", ann);
80 if x.len() > y.len() {
81 x
82 } else {
83 y
84 }
85}