rust中的型別轉換

2021-10-24 09:24:27 字數 2683 閱讀 4955

tryfrom與tryinto

字串的to與from

基本型別可以通過顯示型別轉換機制(as)來實現相互之間的轉換。

rust通過使用trait來處理定製型別(enumstruct)之間的型別轉換。

通用的型別轉換一般使用的trait為fromto

然而,對於常見的型別轉換場景,有更多具體的trait

尤其是在處理關於字串轉換的場景。

traitfrominto是有內在聯絡的,這也是他們的實現細節的一部分。

如果你能夠實現從型別a到型別b轉換,那麼應該相信我們可以實現從型別b到型別a的轉換。

fromtrait允許我們定義如何通過其他的型別來建立該型別的物件,因此提供了乙個非常簡單的機制來實現幾個型別之間的相互轉換。

這個trait在標準庫中有很多實現,實現基本型別和常用型別之間的型別轉換。

我們很容易實現strstring之間的型別轉換。

let my_str =

"hello"

;let my_string =

string::

from

(my_str)

;

對於自定義型別,我們也可以實現類似的型別轉

use std:

:convert:

:from

;#[derive(debug)]

struct number

impl from

fornumber}}

int main()

", num)

;}

traitinto是traitfrom的乙個簡單的逆向函式。即,如果你為你的型別實現了traitfrominto將在需要的時候去呼叫它。

使用traitinto需要指出我們需要轉換成的目標型別,因為編譯器在大多數時候無法推斷出目標型別。然而,考慮到我們獲取到的功能,這只是乙個很小的妥協。

use std:

:convert:

:from

;#[derive(debug)]

struct number

impl from

fornumber}}

fn main()

", num)

;}

frominto類似,tryfromtryinto是型別之間轉換的通用的trait

frominto不同的是,tryfromtryinto被用來處理可能出現失敗的轉換,因而,他們返回的是result型別。

use std:

:convert:

:tryfrom

;use std:

:convert:

:tryinto

;#[derive(debug, partialeq)]

struct evennumber

(i32)

;impl tryfrom

forevennumber

else}}

fn main()

為了把乙個型別轉為string型別,我們只要實現traittostring就可以了。

然而,我們並不會直接的這樣做,我們應該實現traitfmt::display,這個trait會自動提供tostring,而且會可以列印這個型別。

use std:

:fmt;

struct circle

impl fmt:

:display

forcircle",

self

.radius)}}

fn main()

; println!

("{}"

, circle.

to_string()

);}

乙個最常見的型別轉換是把乙個字串轉換為乙個數字。

實現這個功能的常用方法是使用parse方法,並且使用rust型別型別推斷或者使用turbofish語法來指定型別。我們會在如下的示例**中來使用這兩個方法。

只要為該型別實現了fromstr,就可以實現從字串到指定型別的轉換。

標準庫中的很多態別都實現了該trait。如果要在使用者定義的型別的上獲得該功能,只要實現fromstr就可以了。

fn main()

", sum)

;}

丅rust是什麼意思 Rust 中的型別轉換

1.as 運算子 as 運算子有點像 c 中的強制型別轉換,區別在於,它只能用於原始型別 i32 i64 f32 f64 u8 u32 char 等型別 並且它是安全的。例在 rust 中,不同的數值型別是不能進行隱式轉換的,比如 let b i64 1i32 會出現編譯錯誤,提示無法進行型別轉換。...

rust中的型別

rust提供了幾種機制來實現基本型別和使用者自定義型別的轉換和定義。rust中沒有提供基本型別之間隱式地型別的轉換。但是,我們可以通過as關鍵字來進行顯示型別的轉換。在rust中,數字型別的轉換和c語言中的轉換一樣,除了c語言中的未定義的行為。整數型別之間的所有轉換情況都已經在rust中定義好了。禁...

rust中的基礎資料型別

復合型別 rust中的型別注釋 有符號整數主要包括i8 i16 i32 i64 i128和isize 指標大小 無符號整數主要包括u8 u16 u32 u64 u64 u128和usize 指標大小 浮點型資料主要包括f32 f64。字元型資料char,unicode標量值,比如 a b 每乙個字元...