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
声明为泛型类型