锈E0308无法推断类型

时间:2018-12-05 23:23:27

标签: generics rust

我正在尝试创建一个迭代器,该迭代器包装具有给定关联类型的另一个迭代器,并执行一些其他工作。我使用泛型类型,因为写出包装的迭代器的具体类型不是很漂亮。我已将错误减少为以下代码。

trait Trait {
    fn doit(&self);
}

struct S1 {}
impl Trait for S1 {
    fn doit(&self) {}
}

fn create_s1() -> S1 {
    S1 {}
}

fn create<S>() -> S
where
    S: Trait,
{
    create_s1()
}

fn main() {
    let s = create::<S1>();
}

我得到的错误是:

error[E0308]: mismatched types
  --> src/main.rs:18:5
   |
14 | fn create<S>() -> S
   |                   - expected `S` because of return type
...
18 |     create_s1()
   |     ^^^^^^^^^^^ expected type parameter, found struct `S1`
   |
   = note: expected type `S`
              found type `S1`

在我看来,create_s1()返回类型S1,而类型S1实现Trait。为何编译器无法找出S的类型?

我每晚使用rustc 1.32.0(b3af09205 2018-12-04)

0 个答案:

没有答案