mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2025-02-07 01:50:12 +08:00
Update Ch10
This commit is contained in:
parent
9693a93a94
commit
cadbbd30c5
@ -1064,9 +1064,9 @@ fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
|
||||
*清单 10-21:指明签名中全部引用,都必须有着同一生命周期 `'a` 的 `longest` 函数定义*
|
||||
|
||||
|
||||
此代码应会编译,并在清单 10-19 的 `main` 函数中使用他时,产生出这里想要的结果来。
|
||||
此代码应会编译,并在清单 10-19 的 `main` 函数中使用他时,产生出咱们想要的结果。
|
||||
|
||||
该函数签名现在会告诉 Rust,对于生命周期 `'a`,该函数会取两个参数,这两个参数都是存活时间至少为 `'a` 的两个字符串切片。该函数签名还会告诉 Rust,从该函数返回的字符串切片,将存活至少生命周期 `'a` 那么长时间。在实践中,这就表示有这个 `longest` 函数返回的引用的生命周期,与该函数参数所引用到的值生命周期中较小的一致。这些关系,就是这里想要 Rust 在分析此代码时,要用到的关系。
|
||||
这个函数签名现在告诉 Rust,针对某个生命周期 `'a`,该函数会取两个参数,他们都是存活时间至少为 `'a` 的字符串切片。该函数签名还告诉 Rust,从该函数返回的字符串切片,将存活至少生命周期 `'a` 那样长时间。实际上,这表示 `longest` 函数所返回的引用生命周期,与该函数参数引用的值生命周期中较小的一致。这些关系,就是咱们想要 Rust 在分析此代码时,要用到的关系。
|
||||
|
||||
当于函数中对生命周期进行注解时,这些注解是介入函数签名中,而非函数体中。这些生命周期注解,成为了该函数合约的一部分,这与签名中的类型较为相似。令到函数包含生命周期合约(the lifetime contract),就意味着 Rust 编译器所完成的分析,可以相对简单一些。在某个函数被注解的方式,或其被调用的方式存在问题时,所报出的编译器错误,就可以更精准地指向所编写代码或约束的某个部分。相反,相比于添加了生命周期注解,在 Rust 编译器要做出更多有关这里所预期生命周期关系的推断时,那么编译器可能就只能够指出,在问题原因处许多步之外,代码的某个使用了(if, instead, the Rust compiler made more inferences about what we intended the relationships of the lifetimes to be, the compiler might only be able to point to a use of our code many steps away from the cause of the problem)。
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user