类型转换
Cairo支持使用into和try_into方法将一个标量类型转换为另一个类型。
traits::Into
用于从较小的数据类型转换为较大的数据类型,而 traits::TryInto
用于从较大的数据类型转换为较小的数据类型,可能会发生溢出的情况。
例如:
let a_number: u32 = 15;
let my_felt252 = 15;
// 由于 u32 可能不匹配 u8 和 u16,我们需要使用 try_into
// 然后解包返回的 Option<T> 类型。
let new_u8: u8 = a_number.try_into().unwrap();
let new_u16: u16 = a_number.try_into().unwrap();
// 由于 new_u32 的类型(u32)与 a_number 相同,我们可以直接赋值
// 或使用 .into() 方法
let new_u32: u32 = a_number;
// 当从较小的大小类型强制转换为相等或较大的大小类型时,我们使用 .into() 方法
// 注意:u64 和 u128 大于 u32,所以 u32 类型将始终适合其中
let new_u64: u64 = a_number.into();
let new_u128: u128 = a_number.into();
// 由于 felt252 比 u256 小,我们可以使用 into() 方法
let new_u256: u256 = my_felt252.into();
let new_felt252: felt252 = new_u16.into();
//注意,usize 比 felt252 小,因此我们使用 try_into
let new_usize: usize = my_felt252.try_into().unwrap();