rust學習筆記中級篇1–泛型(霜之小刀)
阿新 • • 發佈:2018-11-17
rust學習筆記中級篇1–泛型(霜之小刀)
歡迎轉載和引用,若有問題請聯絡
若有疑問,請聯絡
Email : [email protected]
QQ:2279557541
結構體泛型
首先上程式碼,如何定義一個泛型的結構體
struct Point<T>{
m_x:T,
m_y:T
}
fn main() {
let a = Point{m_x:10, m_y:20};
let b = Point{m_x:1.0f32, m_y:2.0f32};
}
簡單的看,貌似和c++一樣的啊,只是在struct定義結構裡面加個,其中T泛指型別,也就是說結構體內容中,只要用到T的地方都是同一種輸入型別。
這樣我們定義let a = Point{m_x:10, m_y:20};
let b = Point{m_x:1.0f32, m_y:2.0f32};
的時候,編譯器可以推匯出這裡的T代表的是f32型別的。 就是這種能代表i32也能代表f32,同時還能代表任何型別(泛型別)的東東叫做模板。
另外要擴充套件下,結構體泛型並不是只能有一個泛型別,在尖括號中是可以定義多個的,比如
struct Example<T,N>{
m_x:T,
m_y:N
}
列舉泛型
寫到這裡我突然發現,寫基本型別的時候貌似沒說列舉這個型別。。。
那就順帶著講一下,rust的列舉和c++等語言不一樣,c++的列舉其實就是個普通的int的感覺,但是rust得列舉是能有多種型別的。比如這樣寫就是對的
enum E{
E0,
E1(i32),
E2(i8,i8,i8)
}
其中E0更像C++中的意思,沒關聯資料型別,就僅僅是一個用於判斷是使用的東東。
而E1關聯了一個i32的型別,可以使用let x = E::E1(10)來使用。
E2同E1是一樣的,只是多了幾個成員而已。
而知道了前面的結構體泛型如何用,列舉就簡單了,直接上點程式碼搞定!
enum E<T,K>{
E0,
E1(T),
E2(bool),
E3(T,K,i8)
}
函式泛型
直接上程式碼,其中T就是指代泛型別的
fn func_add <T>(a:T, b:T)->T
{
return a+b;
}
fn main() {
let b = func_add(10, 11);
}
運行了麼?發現問題了麼????對 ,報錯了。。。
binary operation `+` cannot be applied to type `T`。
千萬別問我為什麼,我也不知道。。。只是感覺好像編譯器沒法再編譯的時候推到泛型T的+操作符。
不過在下一篇部落格trait:定義共享的行為裡面應該會講到!