rust-具有特征的泛型函数的返回类型

时间:2020-03-26 17:53:21

标签: rust

我试图了解通用函数如何在Rust中工作。这是我的代码:

fn evaluate<T: std::ops::Mul>(portfolio: T, quote: T) -> T {
    portfolio * quote
}

我得到了错误:

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

我做错了什么?

1 个答案:

答案 0 :(得分:2)

Rust并不假定将T类型的值乘以总是会产生T类型的新值。相反,Mul特征具有关联类型 Output,用于指定乘法的返回类型。该错误消息提到该类型为“找到的关联类型<T as std::ops::Mul>::Output”。因此,最简单的解决方案是将函数的返回类型更改为关联类型:

fn evaluate<T: std::ops::Mul>(portfolio: T, quote: T) -> <T as std::ops::Mul>::Output {
    portfolio * quote
}

Output与输入类型不匹配的一个常见示例是将两个引用相乘–输出通常是自有类型,而不是再次引用。

相关问题