Rust為基礎類型實現Trait


pub trait IPrint {
    fn print(&self, formatter: String);

    fn shark(&self, b: i32) -> i32;
}

impl IPrint for i32
{
    fn print(&self, formatter: String) {
        println!("{}, {}", self, formatter);
        
    }

    fn shark(&self, b: i32) -> i32 {
        return self + b;
    }
}

fn main() {
    // 輸出3, sfjk和12
    // 3i32.print(...)也可以,但是3i64.print(..)則報錯,因為沒有為i64實現
    3.print("sfjk".to_string());
    println!("{}", 4.shark(8));
}

這個是Rust比Go好太多的地方,Go沒法為基礎類型實現trait,除非聲明一個類型別名,但是聲明了類型別名原類型的方法又會沒掉很坑爹【因為go實現trait必須和類型聲明在同一個包里】

Rust更叼的是還可以將

pub trait IPrint {
    fn print(&self, formatter: String);

    fn shark(&self, b: i32) -> i32;
}

impl IPrint for i32
{
    fn print(&self, formatter: String) {
        println!("{}, {}", self, formatter);
        
    }

    fn shark(&self, b: i32) -> i32 {
        return self + b;
    }
}

放到另一個模塊里,然后在需要用到這個功能的模塊里use xxx::IPrint;即可調用相關為基礎類型實現的函數(即可以將為基礎類型實現trait的代碼放到一個公共的mod,然后其他地方需要用到相關功能的use該trait即可);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM