Generics 如何将trait绑定到非泛型类型?
我有一个简单的通用函数:Generics 如何将trait绑定到非泛型类型?,generics,rust,numbers,polymorphism,traits,Generics,Rust,Numbers,Polymorphism,Traits,我有一个简单的通用函数: fn加五(t:t)->i32{ 5_i32+t.到() } 我想用From特征而不是Into特征来表达,但是我尝试的重构: fn加五(t:t)->i32{ 5_i32+::从(t) } 抛出此编译错误: error[E0277]:无法将'i32'添加到'i32'中` -->src/main.rs:24:11 | |5_i32+::从(t) |^i32+i32没有实现` | =帮助:没有为'i32'实现特性'Add'` 这非常令人困惑,因为标准库中确实存在一个属性,
fn加五(t:t)->i32{
5_i32+t.到()
}
我想用From
特征而不是Into
特征来表达,但是我尝试的重构:
fn加五(t:t)->i32{
5_i32+::从(t)
}
抛出此编译错误:
error[E0277]:无法将'i32'添加到'i32'中`
-->src/main.rs:24:11
|
|5_i32+::从(t)
|^i32+i32没有实现`
|
=帮助:没有为'i32'实现特性'Add'`
这非常令人困惑,因为标准库中确实存在一个属性,那么真正的问题是什么呢?只能从where子句中添加绑定到非泛型类型的特征:
fn加五(t:t)->i32
哪里
i32:从//开始编译!
{
5_i32+::从(t)
}
失败的原因是编译器将
中使用的所有名称解析为泛型类型参数的标识符
错误消息令人困惑,因为编译器没有澄清何时i32
引用了具体的32位有符号整数类型,而不是泛型类型参数的函数本地标识符(它现在也隐藏了具体的整数类型)
以下是错误消息,但添加了说明:
error[E0277]:无法将'i32'(泛型类型)添加到'i32'(具体整数类型)
-->src/main.rs:24:11
|
|5_i32+::从(t)
|^i32(具体整数类型)+i32(泛型类型)没有实现`
|
=help:trait`Add`未为`i32`(具体整数类型)实现
或者将混淆不清的i32
替换为更传统的U
作为泛型类型:
错误[E0277]:无法将'U'添加到'i32'`
-->src/main.rs:24:11
|
|5_i32+::从(t)
|^i32+U没有实现`
|
=帮助:没有为'i32'实现特性'Add'`
修复方法是简单地将绑定移动到where子句中,如上所述,以避免意外地将i32
声明为泛型类型