【发布时间】:2019-09-06 03:09:57
【问题描述】:
我正在学习 Rust 的生命周期/所有权概念,并想解释 Rust (rustc 1.37.0) 中的以下行为。
对于这样的程序:
#[derive(Debug)]
struct Book {
price: i32,
}
fn main() {
let book1 = Book {price: 12};
let cheaper_book = choose_cheaper(&book1);
println!("{:?}", cheaper_book);
}
fn choose_cheaper(b1: &Book) -> &Book {
if b1.price < 15 {
b1
} else {
let cheapest_book = Book {price: 0};
&cheapest_book
}
}
生锈报告:
17 | &cheapest_book
| ^^^^^^^^^^^^^^ returns a reference to data owned by the current function
我可以理解这个错误,因为变量cheapest_book是价格为0的书的所有者,它会在这个函数结束时被删除,所以返回的引用将在此之后变得无效。但是如果我将choose_cheaper 函数更改为,我很难解释为什么允许以下内容:
fn choose_cheaper(b1: &Book) -> &Book {
if b1.price < 15 {
b1
} else {
let cheapest_book = &Book {price: 0};
cheapest_book
}
}
有人能给我一些启示吗?谢谢。
【问题讨论】:
标签: struct rust initialization lifetime ownership