是否可以使用BoxFnOnce表示闭包引用可变引用并具有较高的生存期?

时间:2018-08-03 09:29:10

标签: rust closures lifetime

Rust中目前有not callableBox版本的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,)>;

但这似乎不正确,因为我们希望闭包可以在任何个参考生存期选择中调用,而不是特定的。如果可能的话,我宁愿不必切换到每晚。

0 个答案:

没有答案