我几乎可以直觉地感觉到为什么这段代码不会工作,但我无法确切地指出原因。我认为这与新函数每次都具有不同的返回类型有关。
为什么这是个问题?为什么直接创建可以工作?
struct Struct<T>
where
T: Fn(&[u8]),
{
func: T,
}
impl<T> Struct<T>
where
T: Fn(&[u8]),
{
fn new() -> Struct<T> {
// this doesn't work
Struct { func: |msg| {} }
}
}
fn main() {
// this works
let s = Struct { func: |msg| {} };
}
错误是:
error[E0308]: mismatched types
--> src/main.rs:14:24
|
14 | Struct { func: |msg| {} }
| ^^^^^^^^ expected type parameter, found closure
|
= note: expected type `T`
found type `[closure@src/main.rs:14:24: 14:32]`
T
是什么?”你希望new
的实现决定返回哪个闭包,但是泛型让调用者决定类型T
是什么。我相信还有另一个问题解决了这个问题...我会找一下。 - trentimpl Trait
来实现。什么是正确的返回迭代器(或任何其他trait)的方法? 是我在寻找的另一个问题。只需将fn new() -> Struct<T>
更改为fn new() -> Struct<impl Fn(&[u8])>
即可解决问题。 - trentfor<'r> <_ as std::ops::FnOnce<(&'r [u8],)>>::Output == ()
”。 - anderspitman