错误:无法推断出关于`_`的足够类型信息;输入所需的注释

时间:2014-11-30 20:53:23

标签: rust

尝试编译此代码时出现奇怪的错误:

pub trait ValueGiver<T> {
    fn give(_: Option<Self>) -> T;
}

struct m;

impl<f64> ValueGiver<f64> for m {
    fn give(_:Option<m>) -> f64 {
        0.5f64
    } 
}

fn main() {
    let y : f64 = ValueGiver::give(None::<m>);
}

playpen

(选项部分是调用静态特征方法的技巧)

我明白了:

c.rs:64:5: 68:6 error: unable to infer enough type information about `_`; type annotations required
c.rs:64     impl<f64> ValueGiver<f64> for m {
c.rs:65         fn give(_:Option<m>) -> f64 {
c.rs:66             0.5f64
c.rs:67         } 
c.rs:68     }

我不知道哪个部分不清楚推理,错误信息不是很有帮助

1 个答案:

答案 0 :(得分:2)

仅使用impl<f64>替换impl您不需要通用impl,您需要特定的impl。您可以将impl<T>写入定义类型参数,稍后您可以在impl中使用这些参数;你不需要这个。

当您编写impl<f64>时,此f64被解释为类型参数。但是,impl中f64的所有其他匹配项都被解释为f64关键字,它指定原始f64类型。编译器抱怨,因为它无法推断出f64类型参数的具体类型。

如果我们将impl<f64>替换为impl<T>we get the same error