14.类型转换


文档摘要

title: 14. 类型转换 tags: cairo starknet into tryinto WTF Cairo极简教程: 14. 类型转换 我最近在学 ,巩固一下细节,也写一个 ,供小白们使用。教程基于 版本。 推特:@0xAAScience|@WTFAcademy WTF Academy 社群:Discord|微信群|官网 wtf.academy 所有代码和教程开源在 github: github.com/WTFAcademy/WTF-Cairo 在这一章中,我们将探讨 Cairo 中的基本类型的类型转换。 类型转换 Cairo 利用 和 特质(Trait)提供了一种安全的类型转换机制,可以在整数类型( 、 等)和 之间进行转换。在最新版本(Cario2.6.

title: 14. 类型转换 tags: - cairo - starknet - into - try_into

WTF Cairo极简教程: 14. 类型转换

我最近在学cairo-lang,巩固一下细节,也写一个WTF Cairo极简教程,供小白们使用。教程基于cairo 2.2.0版本。

推特:@0xAA_Science@WTFAcademy_

WTF Academy 社群:Discord微信群官网 wtf.academy

所有代码和教程开源在 github: github.com/WTFAcademy/WTF-Cairo

在这一章中,我们将探讨 Cairo 中的基本类型的类型转换。

类型转换

Cairo 利用 IntoTryInto 特质(Trait)提供了一种安全的类型转换机制,可以在整数类型(u8u16等)和 felt252 之间进行转换。在最新版本(Cario2.6.0)中,不必再导入traits::Intotraits::TryInto

注意:在进行类型转换时,必须注明新变量的类型。

into()

Into 特质提供了 into() 方法,用于在保证成功的情况下进行类型转换。用于从较小的数据类型转换为较大的数据类型,例如 u8 -> u16 -> u32 -> u64 -> u128 -> felt252

#[external(v0)] fn use_into(self: @ContractState){ // From smaller to larger types, success is guaranteed // u8 -> u16 -> u32 -> u64 -> u128 -> felt252 let x_u8: u8 = 13; let x_u16: u16 = x_u8.into(); let x_u128: u128 = x_u16.into(); let x_felt: felt252 = x_u128.into(); }

try_into()

TryInto 特质提供了 try_into() 方法,在目标类型可能无法容纳源值时进行安全的类型转换。通常用于从较大的数据类型转换为较小的数据类型:u8 <- u16 <- u32 <- u64 <- u128 <- felt252try_into() 方法返回 Option<T> 类型,你需要调用 unwrap() 方法来获取新值。需要注意的是,try_into()可能会发生溢出,产生报错。

#[external(v0)] fn use_try_into(self: @ContractState){ // From larger to smaller types, conversion might fail // u8 <- u16 <- u32 <- u64 <- u128 <- felt252 // try_into() returns an Option, you need to unwrap to get value let x_felt: felt252 = 13; let x_u128: u128 = x_felt.try_into().unwrap(); let x_u16: u16 = x_u128.try_into().unwrap(); let x_u8: u8 = x_u16.try_into().unwrap(); }

总结

在这一章中,我们介绍了 Cairo 中的类型转换。当转换保证成功时,应该使用 into() 方法;对于无法保证成功的情况,应使用 try_into() 方法。


作者与出处
原作者: WTFAcademy
来源:WTFAcademy
许可证:MIT
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: WTFAcademy 转发
评论区 (0)
U