E0308具有简单泛型函数的不匹配类型

时间:2015-09-07 11:31:41

标签: generics rust

我是Rust的新手,我正在尝试编写自己的简单泛型函数。

fn templ_sum<T>(x : T, y : T) -> T
    where T : std::ops::Add
{
    let res : T = x + y;
    res
}

fn main()
{
    let x : f32 = 1.0;
    let y : f32 = 2.0;
    let z = templ_sum(x, y);
    println!("{}", z);
}

但编译失败并显示消息

  

错误:类型不匹配:预期T,       找到<T as core::ops::Add>::Output(预期的类型参数,       找到相关类型)[E0308] main.rs:12让res:T = x + y;

我有点困惑。谁能向我解释我做错了什么?

rustc --version:rustc 1.2.0(082e47636 2015-08-03)

1 个答案:

答案 0 :(得分:5)

Add特征定义了一个名为Output的类型,它是添加的结果类型。该类型是x + y的结果,而不是T

fn templ_sum<T>(x : T, y : T) -> T::Output
    where T : std::ops::Add
{
    let res : T::Output = x + y;
    res
}