Rust中目前有not callable个Box
版本的FnOnce
。解决方法是,我使用的是boxfnonce条板箱,它试图模仿功能。
boxfnonce
板条箱将导出结构BoxFnOnce<'a, (A, B...), R>
,该结构的运行方式如Box<dyn FnOnce(A, B...) -> R + 'a>
起作用。
问题是我希望盒装闭包的参数之一是一个可变的引用,其生存期被取消。如果使用带框的FnOnce
,我可以简单地写:
type Foo<T> = Box<dyn FnOnce(&mut T)>;
这将被排在更高级别的生命中
Box<dyn for<'a> FnOnce(&'a mut T)>
因为Fn
特性是神奇的。问题是BoxFnOnce
既不是魔术,也不是特质,所以当我写
type Foo<T> = BoxFnOnce<(&mut T,)>;
Rust希望我为参考提供一生。
编译器的建议是将生存期参数添加到Foo
:
type Foo<'a, T> = BoxFnOnce<(&'a mut T,)>;
但这似乎不正确,因为我们希望闭包可以在任何个参考生存期选择中调用,而不是特定的。如果可能的话,我宁愿不必切换到每晚。