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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!