Rust 泛型17 Mar 2025 | 5 分钟阅读 当我们想要创建具有多种形式的函数时,即函数的参数可以接受多种数据类型。这可以通过泛型来实现。泛型也称为“参数多态性”,其中 poly 表示多种,morph 表示形式。 有两种方法可以提供泛型代码
![]() 1. Option<T>: Rust 标准库提供了 Option 在上述情况下,enum 是自定义类型,其中 <T> 是泛型数据类型。我们可以用任何数据类型替换 'T'。让我们看看这个 在上述情况下,我们观察到 'T' 可以是任何类型,即 i32、bool、f64 或 char。但是,如果左侧的类型和右侧的值不匹配,则会发生错误。让我们看看这个 在上述情况下,左侧的类型是 i32,右侧的值的类型是 f64。因此,会出现错误“类型不匹配”。 2. Result<T,E>:Rust 标准库提供了另一个数据类型 Result<T,E>,它对两种类型(即 T 和 E)进行泛型: 注意:我们不必使用 'T' 和 'E' 是一种约定。我们可以使用任何大写字母。泛型函数泛型可以用于函数中,我们将泛型放置在函数的签名中,其中指定了参数和返回值的 数据类型。
语法上述语法包含两个部分:
当函数包含多个相同类型的参数时. 当函数包含多种类型的参数时。 结构体定义结构体也可以使用泛型类型参数在一个或多个字段中使用 <> 运算符。 语法 在上述语法中,我们在结构体名称后方的尖括号内声明泛型类型参数,然后我们可以在结构体定义中使用泛型类型。 让我们看一个简单的例子: 输出 integer values : 2,3 Float values : 7.8,12.3 在上面的例子中,Value<T> 结构体是对一种类型的泛型,并且 a 和 b 的类型相同。我们创建了两个实例 integer 和 float。integer 包含 i32 类型的值,float 包含 f64 类型的值。 我们来看另一个简单的示例。 输出 ![]() 在上面的例子中,Value<T> 结构体是对一种类型的泛型,并且 a 和 b 的类型相同。我们创建了一个“c”实例。“c”包含不同类型的值,即 i32 和 f64。因此,Rust 编译器会抛出“类型不匹配”错误。 枚举定义枚举也可以使用泛型数据类型。Rust 标准库提供了 Option<T> 枚举,它保存泛型数据类型。 Option<T> 是一个枚举,其中 'T' 是泛型数据类型。
它由两个变体组成,即 Some(T) 和 None。 ![]() 其中 Some(T) 包含类型 T 的值,而 None 不包含任何值。 让我们来看看 在上述情况下,Option
在上述情况下,Result<T, E> 是一个枚举,它对两种类型进行泛型,并且它由两个变体组成,即 OK(T) 和 Err(E)。 OK(T) 包含类型为 'T' 的值,而 Err(E) 包含类型为 'E' 的值。 方法定义我们可以在结构体和枚举上实现方法。 让我们看一个简单的例子 输出 p.a() is 5 在上面的例子中,我们在 Program<T> 上实现了名为 'a' 的方法,该方法返回对变量 a 中存在的数据的引用。 我们在 impl 之后声明了 'T',以指定我们在 Program<T> 上实现该方法。 解决歧义Rust 编译器会自动推断泛型参数。让我们通过一个简单的场景来理解这一点 在上面的例子中,我们将整数值插入到向量中。因此,Rust 编译器了解到向量 v 的类型为 i32。 如果我们删除倒数第二行,它看起来像; 上面的情况会抛出一个错误,即“它无法推断 T 的类型”。
1. 我们可以使用以下注释 2. 我们可以使用“turbofish”::<> 运算符绑定泛型参数 'T' 下一主题Rust Trait |
我们请求您订阅我们的新闻通讯以获取最新更新。