rust-quiz:025-unit-infallible-match.rs

godme發表於2022-07-15
use std::fmt::{self, Display};

struct S;

impl Display for S {
    fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
        formatter.write_str("1")
    }
}

impl Drop for S {
    fn drop(&mut self) {
        print!("2");
    }
}

fn f() -> S {
    S
}

fn main() {
    let S = f();
    print!("{}", S);
}
  • drop
    當一個值失去全部引用的時候,生命就走到了終點,會呼叫drop
    經常出現的有三種情況
    • 頂替:對一個變數重複賦值,老的值失去引用
    • move:所有權進行轉移,新生
    • 結束:脫離作用域

能夠想到的是,結果必然以為12進行結尾。
主要分析一下let S = f()

fn  f()  -> S { S }

方法內部宣告瞭一個S,作為返回值,這裡發生了move
因此會呼叫一次drop,因此會列印1

212

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章