1. as 運算子
as 運算子有點像 c 中的強制型別轉換,區別在於,它只能用於原始型別(i32 、i64 、f32 、
f64 、 u8 、 u32 、 char 等型別),並且它是安全的。
例在 rust 中,不同的數值型別是不能進行隱式轉換的,比如:
let b: i64 = 1i32;
會出現編譯錯誤,提示無法進行型別轉換。
error[e0308]: mismatched types
--> src\main.rs:2:18
2 | let b: i64 = 1i32;
| ^^^^ expected i64, found i32
help: change the type of the numeric literal from `i32` to `i64`
這時可以使用as 進行轉換。
let b: i64 = 1i32 as i64;
為什麼它是安全的?
嘗試以下**:
let b = 1i32 as char;
編譯器錯誤:
error[e0604]: only `u8` can be cast as `char`, not `i32`
--> src\main.rs:2:13
2 | let b = 1i32 as char;
可見在不相關的型別之間,rust 會拒絕轉換,這也避免了執行時錯誤。
2. trait from 和 into
上文說到,as 運算子之能在原始型別之間進行轉換,那麼對於 struct 和 enum 這樣的型別該如何進行轉換呢? 這就是我們這節的內容 from 和 into 。
先來看一看這兩個 trait 的結構。
pub trait from ", b);
#[derive(debug)]
struct complex ",message);
fn main() {
let message: string = "message".to_string();
print(&message);
print 的形參是 &str 型別,然而在 main 中,我傳遞卻是乙個 &string 型別的實參。明顯,這兩個型別不相同!!rust 為什麼會通過這樣的**呢?
沒錯,這就是 rust 的 解引用強制多型。
首先,需要了解乙個 deref trait 。
#[lang = "deref"]
pub trait deref {
type target: ?sized;
#[must_use]
fn deref(&self) -> &self::target;
deref 方法返回乙個 &target 型別的引用。
回憶一下 rust 中的解引用語法,當 ref 是乙個引用或智慧型指標時,我們可以使用 *ref 的方式解引用。這是類似乙個語法糖,對於 *ref 這種寫法,寫全應該時 *(ref.deref()) 。
回想 box 的使用,box 實現了 deref ,它的 deref 方法返回 &t 的引用,然後使用解引用運算子 * ,我們順利拿到乙個 t 型別的資料。也就是,你可以通過實現 deref 以過載解引用運算子。
deref 和這節的內容有什麼關係呢?
當 t 實現了 deref 時,對於需要 &u 的地方,你可以提供乙個 &t 型別的資料,rust會為你自動呼叫 deref 方法,而這個過程可以重複多次。
比如,我自定義型別 p 實現了 deref ,那麼可以把 &p 型別變數傳遞給乙個 &str 型別變數。&p -> &string -> &str ,偽**: &p.deref().deref() 。
回到這節開頭的例子,print(&message) 相當於 print((&message).deref()) ,正好是乙個 &str 型別。
rust腐竹是什麼意思 Rust
rust 資料型別 rust 語言中的基礎資料型別有以下幾種。整數型 integer 整數型簡稱整型,按照位元位長度和有無符號分為一下種類 位長度有符號 無符號8 bit i8u8 16 bit i16u16 32 bit i32u32 64 bit i64u64 128 bit i128 u128...
rust腐竹是什麼意思 Rust生命週期
不同於rust中的泛型引數,程式設計師是可以手動指定的。rust的生命週期是不能手動指定的,需要編譯器根據傳入的引數進行推斷。當編譯器在某條語句上不能根據引數進行推斷時,他會繼續往下執行並推斷生命週期引數。編譯器會持續根據語句上下文推斷出生命週期引數,並選擇最小的那個。struct context ...
uma是什麼意思 UMA是什麼意思?
展開全部 uma 不明生物 是636f707962616964757a686964616f31333431376537動畫 進化戰記 betterman 中的一類人造怪物的統稱,是生命工學食料研究所 b.p.l.所長梅崎博士製造出來 協助他利用阿尼瑪斯之花 大量製造蛋白質 具有驚人攻擊性的怪物。阿拉...