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