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即可);