微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于 Rust 编程语言生命周期的问题

如何解决关于 Rust 编程语言生命周期的问题

为什么在这个图中'a 在'b 之前结束?它们不应该在花括号的末尾同时结束吗?

enter image description here

这是“The Rust Programming Language”一书中的清单 10-19(https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html

解决方法

在这里,生命周期 0.8210316939890709 Timer: 75.11970710754395 'a 都在花括号的末尾结束。它们都在同一范围内创建和销毁,因为它们都没有移动,所以在这种情况下你是正确的。为了我们的目的,它们同时结束。但是,'b 显示在 'a 之前结束的原因与 Rust 借用检查器处理引用的方式有关,并在 Listing 10-18 of the same Rust Programming Language book 下方解释:

'b

Rust 借用检查器拒绝上述代码段,因为引用 // Listing 10-18 { let r; // ---------+-- 'a // | { // | let x = 5; // -+-- 'b | r = &x; // | | } // -+ | // | println!("r: {}",r); // | } // ---------+ 比值 &x 本身寿命更长,这会导致问题。这本书解释了这一点:

程序被拒绝,因为 'b 比 'a 短:引用的主题没有引用那么长。

这很重要。牢记这一概念,让我们再次阅读您的代码片段:

x

借用检查器必须能够保证引用不会超过它所引用的值。因此,引用的生命周期必须短于值本身的生命周期。在您的代码段中,引用的生命周期 // Listing 10-19 { let x = 5; // ----------+-- 'b // | let r = &x; // --+-- 'a | // | | println!("r: {}",r); // | | // --+ | } // ----------+ 显示为在值的生命周期 'a 之前结束,因为从概念上讲,引用的存在时间不得超过值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。