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

2021-10-16 21:17:29 字數 1888 閱讀 2290

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.所長梅崎博士製造出來 協助他利用阿尼瑪斯之花 大量製造蛋白質 具有驚人攻擊性的怪物。阿拉...