diff --git a/src/Ch10_Generic_Types_Traits_and_Lifetimes.md b/src/Ch10_Generic_Types_Traits_and_Lifetimes.md index 72178fb..e83b4c7 100644 --- a/src/Ch10_Generic_Types_Traits_and_Lifetimes.md +++ b/src/Ch10_Generic_Types_Traits_and_Lifetimes.md @@ -1252,7 +1252,7 @@ fn main() { 文件名:`src/main.rs` ```rust -fn first_word(s: &String) -> &str { +fn first_word(s: &str) -> &str { let bytes = s.as_bytes(); for (i, &item) in bytes.iter().enumerate() { @@ -1274,11 +1274,11 @@ fn first_word(s: &String) -> &str { fn first_word<'a>(s: &'a str) -> &'a str { ``` -在编写了许多的 Rust 代码之后,Rust 团队发现,Rust 程序员们在某些特定情形下,会一次又一次地敲入许多同样的生命周期注解。而这些特定情形,是可被预测的,并遵循了少数几种确定性的模式(a few deterministic patterns)。Rust 开发者们于是就将这些模式,编程进了编译器的代码,于是借用检查器,就可以推断出这些情形下的生命周期,而无需显式的注解了。 +在编写出许多 Rust 代码后,Rust 团队发现,Rust 程序员们在某些特定情形下,会一次又一次地敲入许多同样的生命周期注解。而这些特定情形,是可被预测的,并遵循了少数几种确定性模式,a few deterministic patterns。Rust 开发者们便把这些模式,编程进了编译器的代码,于是借用检查器就可以推断出这些情形下的生命周期,而无需显式的注解。 -由于将来可能合并更多确定性的模式,并将这些模式添加到编译器,因此 Rust 的这段历史是有联系的。在将来,或许就只要求更少甚至没有生命周期注解了。 +由于存在合并更多确定性模式,并将他们到编译器的可能,因此讲 Rust 的这段历史是有必要的。今后,或许就只要求更少甚至没有生命周期注解。 -编程到 Rust 的引用分析中的那些确定性模式,被称为 *生命周期省略规则(lifetime elision rules)*。这些规则并非 Rust 程序员要遵循的规则;他们是一套编译器要考虑的特殊情形,并在咱们编写的代码符合这些情形时,就无需显式地写出生命周期(注解)。 +编程到 Rust 的引用分析中的那些确定性模式,被称为 *生命周期省略规则,lifetime elision rules*。这些规则并非 Rust 程序员要遵循的;他们是编译器将考虑的一套特殊情形,并在咱们的代码符合这些情形时,咱们就不需要显式地写出生命周期。 这些省略规则,并不提供完全的推断。在 Rust 明确地应用了这些规则,但仍有着哪些引用有何种生命周期方面的模糊性时,那么编译器是不会就其余引用变量应有何种生命周期,加以猜测的。编译器将给到某个可通过添加生命周期注解,而予以消除的错误消息,而非对模糊的引用生命周期胡乱猜测。