我有一个函数,它返回我想从另一个trait
中的方法调用的impl Stream
.这里有一个非常粗略的例子,说明我正在努力实现的目标:
struct Example<S>
where
S: Stream<Item = String>,
{
phantom: std::marker::PhantomData<S>,
}
trait Thing<S> {
fn go(self) -> S;
}
impl<S> Thing<S> for Example<S>
where
S: Stream<Item = String>,
{
fn go(self) -> S {
the_stream()
}
}
fn the_stream() -> impl Stream<Item = String> {
stream::unfold(0, |i| async move { Some((i.to_string(), i + 1)) })
}
这会产生错误:
期望的类型参数
S
发现不透明的类型impl Stream<Item = String>
类型参数S
具有与返回类型the_stream
相同的约束,但是编译器无法匹配它们.我显然对不透明类型如何映射到类型参数缺乏一些理解.我可以做些什么来帮助编译器,让代码在不对流进行装箱的情况下运行?