rust - 是否可以使用 BoxFnOnce 来表达一个具有更高生命周期的可变引用的闭包?
问题描述
一个Box
edFnOnce
目前在 Rust 中是不可调用的。作为一种解决方法,我正在使用boxfnonce板条箱,它试图模仿功能。
boxfnonce
crate 导出一个 struct BoxFnOnce<'a, (A, B...), R>
,它的功能与它的工作方式相同Box<dyn FnOnce(A, B...) -> R + 'a>
。
问题是我希望我的盒装闭包的一个参数是一个可变引用,它的生命周期被省略了。如果我使用 boxed 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,)>;
但这似乎不对,因为我们希望闭包可以在任何引用生命周期的选择上调用,而不是特定的。如果可能的话,我宁愿不必切换到夜间。
解决方案
推荐阅读
- java - 阻止应用在启动时暂停音乐(来自 Spotify 等)?
- angular - 组件的构造函数调用了两次
- android - 如何将我的图书馆模块的活动设为私有
- javascript - 是否可以使用 css/javascript 在主页上绘图?
- javascript - jQuery单击第二次单击不起作用
- python - 通过将条件设置为变量来循环 df.query
- cakephp-3.7 - Cakephp:缺少国际扩展名
- android - Fresco - 来自 ControllerListener 的 onIntermediateImageSet 未被调用
- batch-file - 我需要编写一个批处理脚本来重新启动两个服务,但在检查日志文件后才启动第二个服务
- angular - 有没有办法在基于 Angular 8 的前端应用程序上设置 LDAP 身份验证?