StarknetAstro

StarknetAstro

04_Cairoの型変換

04_Cairo 中の型変換#

この記事で使用されている Cairo コンパイラのバージョン:2.0.0-rc0。Cairo は急速に更新されているため、異なるバージョンでは文法が若干異なる場合があります。将来的には、記事の内容を安定したバージョンに更新します。

現在、Cairo での型変換は、u8、u16、u256、felt252 など、さまざまなタイプの整数の相互変換に主に使用されます。たとえ u8 と u16 のような非常に似たタイプであっても、他のプログラミング言語とは異なり、相互変換は容易ではありません。

TryInto&Into トレイト#

まず、これらの 2 つの公式ライブラリで提供される 2 つのトレイトについて説明します。整数型の相互変換を実現するために、これらの 2 つのトレイトを使用する必要があります。

(1). TryInto
TryInto トレイトは、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 トレイトは、ターゲットタイプの範囲がソースタイプよりも大きい場合、オーバーフローエラーを考慮する必要がないため、安全に変換できます。たとえば、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 も同じようにこれらのトレイトを使用して変換できることです。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。