From 85a2e451ddeb9cafeb8854f2dbbc63fac96897fa Mon Sep 17 00:00:00 2001 From: Calvin Date: Fri, 22 Aug 2025 22:09:34 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E8=A1=A5=E5=85=85=E4=B8=8D=E5=AE=8C?= =?UTF-8?q?=E6=95=B4=E7=9A=84=E4=BE=8B=E5=AD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tutorial/09_lifetimes.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) 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); } ``` From e732d69d26ce5bf3464c74fcc84e8da176ccfab9 Mon Sep 17 00:00:00 2001 From: Calvin Date: Sun, 24 Aug 2025 16:45:47 +0800 Subject: [PATCH 2/4] =?UTF-8?q?fix=20error[E0308]:=20mismatched=20types=20?= =?UTF-8?q?=20=20-->=20src/main.rs:44:16=20=20=20=20|=2044=20|=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20sum=20+=3D=20adder.compute(10);=20//=20=E9=9A=90?= =?UTF-8?q?=E5=BC=8F=E8=BD=AC=E6=8D=A2=20i32=20=E5=88=B0=20i64=20=20=20=20?= =?UTF-8?q?|=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20^^^^^^^^^^^^^^?= =?UTF-8?q?^^^=20expected=20,=20found?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit error[E0277]: cannot add-assign to --- tutorial/10_trait_objects.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorial/10_trait_objects.md b/tutorial/10_trait_objects.md index 3d2cce5..a5fba08 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); From 3ba29e66ae6fd4852724be52edc84775a717ab32 Mon Sep 17 00:00:00 2001 From: Calvin Date: Sun, 24 Aug 2025 17:10:28 +0800 Subject: [PATCH 3/4] fix compilation issue --- tutorial/10_trait_objects.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tutorial/10_trait_objects.md b/tutorial/10_trait_objects.md index a5fba08..ed4db10 100644 --- a/tutorial/10_trait_objects.md +++ b/tutorial/10_trait_objects.md @@ -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 { From fc152f2265adc042c5dd4032e76134d48c0a4042 Mon Sep 17 00:00:00 2001 From: Calvin Date: Sat, 30 Aug 2025 12:38:32 +0800 Subject: [PATCH 4/4] fix one comment --- tutorial/10_trait_objects.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorial/10_trait_objects.md b/tutorial/10_trait_objects.md index ed4db10..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) as i64; // 隐式转换 i32 到 i64 + sum += adder.compute(10) as i64; // 显式转换 i32 到 i64 以避免编译错误 } println!("静态分发时间: {:?}", start.elapsed()); println!("静态分发结果 (i32): {}", sum);