在 Cairo 中,泛型(generics)是一种通用编程机制,允许你编写可重用的代码来处理不同类型的数据,而不必在每种情况下都重新编写相似的代码。本章将向你介绍 Cairo 中的泛型,并向你展示如何利用它们编写灵活且可重用的代码。
请注意,使用泛型可能会增加 Starknet 合约的大小。
什么是泛型?
在 Cairo 中,泛型(generics)是一种通用编程机制,允许你编写可重用的代码来处理不同类型的数据,而不必在每种情况下都重新编写相似的代码。使用泛型,你可以编写函数、结构体、枚举和方法,使它们能够接受不同类型的参数或具有不同类型的字段。这样的代码被称为“泛型代码”,因为它们在一般情况下适用于多个具体类型。
泛型函数
Cairo 中的泛型函数是使用类型参数定义的。类型参数在函数名后的尖括号 < >
中指定。例如 <T>
:
在上述代码中,swap()
是一个接受任何类型 T
的两个值 a
和 b
的泛型函数。我们可以使用这个函数来交换 a
和 b
的值,只要它们是相同的类型。
泛型结构体和枚举
与函数类似,你也可以创建泛型结构体和枚举。类型参数在结构体或枚举名之后的尖括号 < >
中指定。例如:
在上述代码中,Pair
是一个可以保存两个相同类型 T
的值的泛型结构体。OptionExample
是一个泛型枚举,可以保存任何类型 T
的值(Some)或表示没有值(None)。
实现泛型方法
你还可以在结构体或枚举中定义泛型方法。为此,你需要在实现名(Implementation Name)之后指定类型参数。
在上述代码中,new()
是一个泛型方法,会创建一个新的 Pair
结构体实例,该实例包含两个类型 T
的值。
约束
Cairo 允许你对用泛型的类型施加约束。约束确保泛型代码只与满足特定要求的类型一起工作。例如:
在上述代码中,PairImpl
是一个仅与实现 Copy
特征的类型一起工作的泛型实现,它支持在 getFirst()
函数中使用的 desnap
操作。
总结
在这一章中,我们概述了 Cairo 中的泛型,包括泛型函数、结构体、枚举、方法、约束及其优点。有了这些知识,你可以开始在你的 Cairo 程序中利用泛型,解锁代码重用和类型安全的全部潜力。