rust - 如何为将成为闭包参数的关联类型指定生命周期?
问题描述
我有一个函数的特征,这个函数接受一个闭包作为参数,而该闭包接受一个参数,该参数需要是实现该Read
特征的某种类型:
trait CanRead {
type Reader: io::Read;
fn do_reading<F>(&mut self, fun: F)
where F: FnOnce(&mut Self::Reader);
}
Read
通过指定并在函数中type Reader = Self;
运行,我可以轻松地为已经实现的任何东西实现这个特征。fun(self);
do_reading
挑战是,我还想为某些类型实现这个特性,它必须创建一个u8
s 的临时向量。那么关联类型Reader
需要是引用类型,但是不知道给它什么生命周期:
pub struct EmptyStruct { }
impl CanRead for EmptyStruct {
type Reader = &[u8]; // doesn't compile; must specify a lifetime here
fn do_reading<F>(&mut self, fun: F)
where F: FnOnce(&mut Self::Reader) {
let temp = vec![1, 2, 3];
fun(&mut &temp[..]);
}
}
我知道我需要指定一个生命周期,但它可能是什么?我查看了这个有用的相关问题,但建议的方法都不起作用。问题是类型的生命周期实际上与实例Reader
的生命周期无关;EmptyStruct
相反,Reader
引用类型只需要不超过对闭包本身的调用。是否有某种方法可以在 Rust 中指定这一点,或者另一种方法来解决这种模式?
游乐场有我试过但没用的东西。
(注意,我知道对于这个特定的代码,temp
向量可以用静态数组替换,但这不适用于我真正需要做的事情。)
解决方案
推荐阅读
- json - 无法在 jira 中发布 .json 文件
- postgresql - Postgres 服务未启动
- .net - MVC @HTML.ActionLink
- java - 通过 Jenkins 参数化 JUnit CucumberOptions
- json - 使用 Swift 解码器从 JSON 数组中提取属性
- node.js - 使用 sinon fake 进行单元测试无法解决承诺
- pytorch - 如何使用 Pytorch 将 FloatTensor 转换为 ByteTensor?
- ansible - ansible vmware windows 服务器
- java - 如何使用 findElements 检查下拉菜单中的复选框并获取?(java/seleniumWebDriver)
- php - 如何将 Wordpress 数据库导入纯 PHP MySQL 网站?