泛型 #
Move 语言支持使用泛型,它允许开发人员编写可用于不同类型数据的代码,而不必为每种特定类型重写代码。
Move 中的泛型类似于其他编程语言(如 Java 和 C#)中的泛型。它们允许开发人员编写可重用的代码,这些代码可以与满足一组特定要求的任何类型一起使用。这有助于减少代码重复并提高代码的可读性和可维护性。
在 Move 中,我们经常将术语泛型与类型参数和类型参数互换使用。
声明类型参数
函数和结构都可以在它们的签名中采用类型参数列表,用一对尖括号 <...>
括起来。
泛型函数
函数的类型参数位于函数名称之后和(值)参数列表之前。下面的代码定义了一个通用的身份函数,它接受任何类型的值并返回不变的值。
一旦定义,类型参数 T
就可以在参数类型、返回类型和函数体内使用。
module my_addrx::Generics
{
//a generic identity function that takes a value of any type and returns that value unchanged
fun example<T>(num: T): T {
num
}
#[test]
fun testing()
{
let x:u64 = example<u64>(8);
let y:bool = example<bool>(true);
assert!(x==8,1);
assert!(y==true,1);
}
}
通用结构
结构的类型参数放在结构名称之后,可用于命名字段的类型。
struct Foo<T> has copy, drop { x: T }
struct Bar<T1, T2> has copy, drop {
x: T1,
y: vector<T2>,
}