这样可以工作:
struct Foo<T, F>
where
F: Fn() -> Option<T>,
{
f: F,
}
但是这会导致编译错误:
struct Bar<I, T, F>
where
F: Fn(I) -> Option<T>,
{
f: F,
}
error[E0392]: parameter `I` is never used
--> src/lib.rs:1:12
|
1 | struct Bar<I, T, F>
| ^ unused parameter
|
= help: consider removing `I`, referring to it in a field, or using a marker such as `std::marker::PhantomData`
error[E0392]: parameter `T` is never used
--> src/lib.rs:1:15
|
1 | struct Bar<I, T, F>
| ^ unused parameter
|
= help: consider removing `T`, referring to it in a field, or using a marker such as `std::marker::PhantomData`
为什么在闭包的返回类型中使用类型参数可以,但在其参数中不行?
我可以通过将闭包存储为特质对象来解决此问题:
struct Bar<I, T> {
f: Box<Fn(I) -> Option<T>>,
}
但如果可能的话,我想避免这种情况。