Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
rust-来自具有traits的泛型函数的返回类型_Rust - Fatal编程技术网

rust-来自具有traits的泛型函数的返回类型

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<

我试图理解泛型函数在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<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
,但解释较长。明白吗。一种,谢谢。