rust-来自具有traits的泛型函数的返回类型
我试图理解泛型函数在Rust中是如何工作的。这是我的密码:rust-来自具有traits的泛型函数的返回类型,rust,Rust,我试图理解泛型函数在Rust中是如何工作的。这是我的密码: fn evaluate<T: std::ops::Mul>(portfolio: T, quote: T) -> T { portfolio * quote } fn评估(投资组合:T,报价:T)->T{ 投资组合*报价 } 我得到了一个错误: error[E0308]: mismatched types --> src/main.rs:10:5 | 9 | fn evaluate<
fn evaluate<T: std::ops::Mul>(portfolio: T, quote: T) -> T {
portfolio * quote
}
fn评估(投资组合:T,报价:T)->T{
投资组合*报价
}
我得到了一个错误:
error[E0308]: mismatched types
--> src/main.rs:10:5
|
9 | fn evaluate<T: std::ops::Mul>(portfolio: T, quote: T) -> T {
| - expected `T` because of return type
10 | portfolio * quote
| ^^^^^^^^^^^^^^^^^ expected type parameter `T`, found associated type
|
= note: expected type parameter `T`
found associated type `<T as std::ops::Mul>::Output`
= note: you might be missing a type parameter or trait bound
错误[E0308]:类型不匹配
-->src/main.rs:10:5
|
9 | fn评估(投资组合:T,报价:T)->T{
|-由于返回类型,应为'T'
10 |投资组合*报价
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^所需的类型参数“T
|
=注意:应为类型参数`T`
找到关联的类型“::输出`
=注意:您可能缺少类型参数或特征绑定
我做错了什么?Rust并不认为与类型为
T
的to值相乘总是会产生类型为T
的新值。相反,Mul
特性有一个关联的类型输出
,它指定了乘法的返回类型。错误消息将该类型称为“找到关联类型<代码>::输出”。因此,最简单的解决方案是将函数的返回类型更改为关联类型:
fn evaluate<T: std::ops::Mul>(portfolio: T, quote: T) -> <T as std::ops::Mul>::Output {
portfolio * quote
}
fn评估(投资组合:T,报价:T)->:输出{
投资组合*报价
}
输出
与输入类型不匹配的一个常见示例是将两个引用相乘–输出通常是一个拥有的类型,不再是引用。查看添加
特性上的文档。简单的解决方案是将绑定更改为T:std::ops::Mul
,但解释较长。明白吗。一种,谢谢。