首页 文章

E0308具有简单泛型函数的不匹配类型[重复]

提问于
浏览
0

这个问题在这里已有答案:

我是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 回答

  • 5

    Add trait定义一个名为 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
    }
    

相关问题