终身省略的第三条规则说
如果有多个输入生命周期参数,但其中之一是
&self或&mut self因为这是一种方法,则生命周期self被分配给所有输出生命周期参数。这使得编写方法更好。
这是描述此功能发生了什么的教程
fn announce_and_return_part(&self, announcement: &str) -> &str
Run Code Online (Sandbox Code Playgroud)
有两个输入生命周期,所以 Rust 应用第一个生命周期省略规则并给出它们
&self和announcement它们自己的生命周期。然后,因为其中一个参数是&self,返回类型获得 的生命周期&self,并且所有生命周期都已被考虑在内。
我们可以证明所有生命周期都没有考虑在内,因为它的生命周期可能与announcement不同&self:
struct ImportantExcerpt<'a> {
part: &'a str,
}
impl<'a> ImportantExcerpt<'a> {
fn announce_and_return_part(&self, announcement: &str) -> &str {
println!("Attention please: {}", announcement);
announcement
}
}
fn main() {
let i = ImportantExcerpt { part: "IAOJSDI" };
let test_string_lifetime;
{
let a = String::from("xyz");
test_string_lifetime = i.announce_and_return_part(a.as_str());
}
println!("{:?}", test_string_lifetime);
}
Run Code Online (Sandbox Code Playgroud)
的寿命announcement不长&self,因此将输出生命周期与 关联是不正确的,输出生命周期&self不应该与输入的较长者相关联吗?
为什么生命周期省略的第三条规则是分配输出生命周期的有效方法?
不,省略规则不能捕获生命周期中的所有可能情况。如果他们这样做了,那么就不会有任何省略规则,它们将是唯一的规则,我们不需要任何语法来指定明确的生命周期。
引用您链接到的文档,强调我的:
编程到 Rust 的引用分析中的模式称为生命周期省略规则。这些不是程序员应该遵循的规则;规则是编译器会考虑的一组特定情况,如果您的代码适合这些情况,则无需明确编写生命周期。
省略规则不提供完整的推理:如果 Rust 确定性地应用规则,但仍然不明确引用的生命周期,它不会猜测剩余引用的生命周期应该是什么。在这种情况下,编译器会给你一个错误,可以通过添加生命周期注解来解决这个错误,这些注解与你的意图如何引用相互关联。
的生命周期
announcement不长&self,因此将输出生命周期与&self为什么生命周期省略的第三条规则是分配输出生命周期的有效方法?
“正确”可能不是在这里使用的正确词。什么是省音规则所做的是一个有效的方式,只是碰巧不是您可能想要的。
输出寿命不应该与输入的较长时间相关联吗?
是的,这对于这个例子是可以接受的,这不是最常见的情况,所以这不是省略规则的目的。
也可以看看:
| 归档时间: |
|
| 查看次数: |
202 次 |
| 最近记录: |