StarknetAstro

StarknetAstro

04_Cairoの型変換

04_Cairo 中の型変換#

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

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

TryInto & Into traits#

まず、これらの 2 つの公式ライブラリで提供される 2 つのtraitsを紹介します。整数型の相互変換を実現するために、これらの 2 つの 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 も同様にこれらの traits を使用して変換できることです。

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