StarknetAstro

StarknetAstro

04_Cairo中的類型轉換

04_Cairo 中的類型轉換#

此文章使用的 Cairo 編譯器版本:2.0.0-rc0。因為 Cairo 正在快速更新,所以不同版本的語法會有些許不同,未來將會將文章內容更新到穩定版本。

目前 Cairo 中的類型轉換主要是將各種類型的整數相互轉換,例如:u8、u16、u256、felt252 等。即使是 u8 和 u16 這兩種十分相似的類型,相互轉換也不像其他編程語言那樣輕鬆。

TryInto & Into traits#

首先需要介紹一下這兩個官方庫中提供的兩個traits。我們要實現整數類型相互轉換,就需要使用這兩個 traits。

(1). TryInto
TryInto trait 提供 try_into 函數,當源類型的取值範圍比目標類型大時使用,比如 felt252 轉換成 u32 。try_into 函數返回值是Option<T>類型🔗Option的,如果目標類型無法裝下原值,那麼就會返回 None;如果可以裝下,就會返回 Some。如果返回 Some,就還需要通過 unwrap 函數將返回值轉換為目標類型。看例子:

use traits::TryInto;
use option::OptionTrait;

fn main() {
    let my_felt252 = 10;
	let my_usize: usize = my_felt252.try_into().unwrap();
}

上面先定義了一個 felt252 的變量my_felt252,然後使用try_into轉換為Option<T>類型,再調用 Option 自帶的unwrap函數,將Option中的泛型變量轉換為 usize 類型變量my_usize

(2). Into
知道了 TryInto 的知識後,Into 就很好理解了。Into trait 提供 into 函數,當目標類型的取值範圍比源類型大時,我們就不必考慮溢出錯誤,所以可以放心轉換。比如 u32 轉換為 u64 。into 函數將會直接返回目標類型的變量,不需要再使用 Option 進行轉換。

use traits::TryInto;
use traits::Into;
use option::OptionTrait;

fn main() {
    let my_u8: u8 = 10;
    let my_u16: u16 = my_u8.into();

	let my_u256:u256 = my_felt252.into();
}

值得注意的是,u256 同樣可以使用這兩個 trait 進行轉換。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。