rust-quiz:033-range-full-method.rs

godme發表於2022-07-15
use std::ops::RangeFull;

trait Trait {
    fn method(&self) -> fn();
}

impl Trait for RangeFull {
    fn method(&self) -> fn() {
        print!("1");
        || print!("3")
    }
}

impl<F: FnOnce() -> T, T> Trait for F {
    fn method(&self) -> fn() {
        print!("2");
        || print!("4")
    }
}

fn main() {
    (|| .. .method())();
}
  • ..
    之前就說過..,不但可以作為匹配模式,可以作為切片索引,還是RangeFull
    對於這類資料,需要明確的是,符號可以替換為物件,但是不能直接作為物件使用。
    特殊場景需要進行特殊宣告。

主要問題在於|| .. .method()該怎麼計算。
劃分方式有兩種

  • (|| ..) .method(): 列印24
  • || (.. .method):列印1,因為雙重閉包()不會列印3

可以嘗試一下,|| (.. .method())會提示錯誤,毫無疑問結果是24
但是根據上述的內容,符號和物件轉換需要特殊宣告,我們只要特殊操作一下即可
|| ((..).methid()),此時就會只列印1

24

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

相關文章