09.枚举


文档摘要

title: 09. 枚举 tags: cairo starknet enum WTF Cairo极简教程: 9. 枚举 我最近在学 ,巩固一下细节,也写一个 ,供小白们使用。教程基于 版本。 推特:@0xAAScience|@WTFAcademy WTF Academy 社群:Discord|微信群|官网 wtf.academy 所有代码和教程开源在 github: github.com/WTFAcademy/WTF-Cairo 在本章节中,我们将介绍在Cairo中使用 (枚举)的方法。 Cairo 中的枚举 Cairo 中的枚举由一组固定的命名值(变量)组成,或者可以说时多个子类型公用一个枚举类型,其中每个值都是不同的,并且具有特定的含义。使用枚举可以提高代码的可读性并减少错误。

title: 09. 枚举 tags: - cairo - starknet - enum

WTF Cairo极简教程: 9. 枚举

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

推特:@0xAA_Science@WTFAcademy_

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

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

在本章节中,我们将介绍在Cairo中使用enum(枚举)的方法。

Cairo 中的枚举

Cairo 中的枚举由一组固定的命名值(变量)组成,或者可以说时多个子类型公用一个枚举类型,其中每个值都是不同的,并且具有特定的含义。使用枚举可以提高代码的可读性并减少错误。

Cairo中枚举的用法为:首先给出derive关键字表明该枚举对象的特性,然后使用enum关键字定义枚举,并在其后给出一个首字母大写的名称,最后在{}中给出枚举变量及其关联的值。

#[derive(Drop, Serde)] enum Colors { Red: (), Green: (), Blue: (), }

枚举还可以存储自定义类型数据。在以下示例中,我们定义了一个具有不同变量类型的Actions枚举:

#[derive(Copy, Drop)] enum Actions { Forward, Backward: u128, Stop: (felt252,felt252), }

在此示例中,Froward没有关联任何值,Backward是单个u128,stop是两个felt252类型的元组。您甚至可以在枚举变量中定义strut或其他枚举。

创建枚举变量

您可以使用以下语法创建枚举变量:

let forward = Actions::Forward((1_u128));

在函数中返回枚举

枚举可以在函数中返回:

// 返回红色 #[external(v0)] fn get_red(self: @ContractState) -> Colors { Colors::Red(()) } #[external(v0)] fn create_enum(self: @ContractState) { // create enum let backward = Actions::Backward((1_u128)); let red = get_red(self); }

Enums storage

与结构体类似,状态变量中也可以使用枚举,其存储方式为顺序存储,开始位置与第一个变量有关,其后按照关联值和变量依次递增。

#[storage] struct Storage{ dir: Direction } #[derive(Drop, Serde, starknet::Store)] enum Direction { North: u128, East: u128, South: u128, West: u128, }

总结

在本教程中,我们介绍了如何定义枚举、创建枚举变量以及在函数中返回枚举。在之后学习模式匹配后,可以根据选择不同的枚举变量做出不同的应对。这些知识将帮助您在Cairo中创建更具可读性和抗错误性的代码。


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