tryfrom與tryinto
字串的to與from
基本型別可以通過顯示型別轉換機制(as
)來實現相互之間的轉換。
rust通過使用trait
來處理定製型別(enum
、struct
)之間的型別轉換。
通用的型別轉換一般使用的trait為from
和to
。
然而,對於常見的型別轉換場景,有更多具體的trait
。
尤其是在處理關於字串轉換的場景。
traitfrom
和into
是有內在聯絡的,這也是他們的實現細節的一部分。
如果你能夠實現從型別a到型別b轉換,那麼應該相信我們可以實現從型別b到型別a的轉換。
from
trait允許我們定義如何通過其他的型別來建立該型別的物件,因此提供了乙個非常簡單的機制來實現幾個型別之間的相互轉換。
這個trait
在標準庫中有很多實現,實現基本型別和常用型別之間的型別轉換。
我們很容易實現str
和string
之間的型別轉換。
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
的乙個簡單的逆向函式。即,如果你為你的型別實現了traitfrom
,into
將在需要的時候去呼叫它。
使用traitinto
需要指出我們需要轉換成的目標型別,因為編譯器在大多數時候無法推斷出目標型別。然而,考慮到我們獲取到的功能,這只是乙個很小的妥協。
use std:
:convert:
:from
;#[derive(debug)]
struct number
impl from
fornumber}}
fn main()
", num)
;}
與from
和into
類似,tryfrom
和tryinto
是型別之間轉換的通用的trait
。
與from
和into
不同的是,tryfrom
和tryinto
被用來處理可能出現失敗的轉換,因而,他們返回的是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 每乙個字元...