rust-quiz:028-underscore-prefix.rs
题目
struct Guard;
impl Drop for Guard {
fn drop(&mut self) {
print!("1");
}
}
fn main() {
let _guard = Guard;
print!("3");
let _ = Guard;
print!("2");
}
关键
_
之前有一个类似的案例,这里的_并不回收声明周期。
但是,这里需要重新明确的是- 以
_作为首次声明,标识马上结束生命周期 - 以
_开头的变量,声明不结束声明周期,后续_声明结束声明周期 _非首次声明,不立即结束声明周期
- 以
为了理解,我们举出如下例子
声明即结束
fn main() { let _ = Guard; print!("2"); }打印
12声明保留
fn main() { let _a = Guard; print!("3"); let a = Guard; print!("2"); }第二次声明不是
_,_a不作为_,不立即结束声明周期。
打印3211声明传递
fn main() { let _a = Guard; print!("3"); let _ = Guard; print!("2"); }首次
_a引用,第二次_声明结束声明周期,第二个_最后drop.
打印3121就近影响
fn main() { let _a = Guard; print!("3"); let _b = Guard; print!("2"); let _ = Guard; print!("4"); }打印
321411。
这里只有_b在_声明时进行了drop.
题解
这里看来,在_声明的时候,_guard会进行drop。
根据上述原理,打印3121
答案
3121
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
推荐文章: