diff --git a/tutorial/09_lifetimes.md b/tutorial/09_lifetimes.md index d629169..39346cc 100644 --- a/tutorial/09_lifetimes.md +++ b/tutorial/09_lifetimes.md @@ -201,9 +201,17 @@ impl<'a> ImportantExcerpt<'a> { fn main() { let novel = String::from("Call me Ishmael. Some years ago..."); let first_sentence = novel.split('.').next().expect("Could not find a '.'"); - let i = ImportantExcerpt { - part: first_sentence, - }; + + let res; + { + let i = ImportantExcerpt { + part: first_sentence, + }; + res = i.announce_and_return_part("生命周期"); + println!("{}", res); + } + // 根据上面的规则3,res的生命周期由 i 决定。此处 i 已经离开作用域,故 res 无效 + // println!("{}", res); } ``` diff --git a/tutorial/10_trait_objects.md b/tutorial/10_trait_objects.md index 3d2cce5..61e9fb9 100644 --- a/tutorial/10_trait_objects.md +++ b/tutorial/10_trait_objects.md @@ -413,7 +413,7 @@ fn benchmark() { let start = Instant::now(); let mut sum: i64 = 0; for _ in 0..1000000 { - sum += adder.compute(10); // 隐式转换 i32 到 i64 + sum += adder.compute(10) as i64; // 显式转换 i32 到 i64 以避免编译错误 } println!("静态分发时间: {:?}", start.elapsed()); println!("静态分发结果 (i32): {}", sum); @@ -568,23 +568,23 @@ fn use_service(service: &mut dyn Service, input: &str) -> String { } // 2. 必要时才转移所有权 -struct ServiceManager { - services: Vec>, +struct ServiceManager<'s> { + services: Vec>, } -impl ServiceManager { +impl<'s> ServiceManager<'s> { // R: 提供只读访问 - fn find_service(&self, index: usize) -> Option<&dyn Service> { + fn find_service(&self, index: usize) -> Option<&(dyn Service + 's)> { self.services.get(index).map(|s| s.as_ref()) } // W: 提供可变访问 - fn find_service_mut(&mut self, index: usize) -> Option<&mut dyn Service> { + fn find_service_mut(&mut self, index: usize) -> Option<&mut (dyn Service+'s)> { self.services.get_mut(index).map(|s| s.as_mut()) } // O: 转移所有权(谨慎使用) - fn extract_service(&mut self, index: usize) -> Option> { + fn extract_service(&mut self, index: usize) -> Option> { if index < self.services.len() { Some(self.services.remove(index)) } else {