rust - 如何指定在某些特征边界下满足给定第一个特征的任何类型也必须隐式满足第二个特征?
问题描述
我有与Unable to tokio::run a boxed Future 类似的情况,因为不满足 trait bound Send):我想在where没有实现tokio::run
的类型上使用。Box<T: Future ...>
T
Send
我的情况不同,因为我没有编写返回 my 的方法Box
,因此无法更改其方法签名。它执行一个网络请求并返回这个装箱的未来:
pub fn get_resource(&self,) -> Box<Future<Item = RestStruct, Error = Error<serde_json::Value>>>
注意缺少Send
.
根据Tokio 文档,我需要Send
在我的盒装类型上实现,即使未来的关联类型是Send
:
精明的读者可能会注意到定义中明确的
Send
特征符号Box
。添加符号是因为默认情况下Future
未明确显示Send
;这会在稍后尝试将此未来或其衍生物之一传递给tokio::run
.
我很难找到一种适当简洁的方法来做到这一点。似乎这些方面的东西应该起作用:
impl<T, I, E> Send for T
where
T: Future<Item = I, Error = E>,
I: Send,
E: Send,
{
}
我得到了一些令人惊讶的错误。我将在下面详细说明它们,但我的问题可以笼统地说,我如何指定:在某些特征范围内满足给定第一个特征的任何类型也必须隐式满足第二个特征?
我的解决方案产生的错误:
该特征
std::marker::Send
需要unsafe impl
声明
我想我理解的是基于关于的文档Send
,但要澄清:这确实构成了那里描述Send
的“正确实现” ,因为相关的类型是?Send
类型参数
T
必须用作某些局部类型的类型参数(例如,MyStruct<T>
)
我理解这与文档中描述的新类型解决方法有关,如果是这样的话,这真的会妨碍我做我想做的事情。这是否意味着我无法完成我想要的?有没有类似有界特征的类型别名可以解决这个问题?
std::marker::Send
类型特征的冲突实现&_
那个,完全看不懂。&_
比我尝试使用所有这些where
边界指定的受约束类型要广泛得多;我不希望&_
是Future<Item = I: Send, Error = E: Send>
。
解决方案
推荐阅读
- pandas - 如何使用 Python 从组合的出现中形成计数矩阵?
- macos - Mac上的docker,在任何目录上安装卷失败“安装被拒绝:EOF”
- python - Python 中的快速数据集增强 - 深度学习
- javascript - 如何使用 jspdf-Autotable 在表格中添加自定义最后一行
- android - 在没有操作栏的情况下显示活动标题的好方法是什么?
- reactjs - 使用 Redux 和 React Hooks 设置状态的最佳方式
- r - 如何在 R 中对数据框中的值求和?
- javascript - 如果输入文件类型有值(Bootstrap4),则在关闭模式之前显示确认消息
- javascript - 动态地将 css 赋予数组中的元素
- r - 在需要列规范的函数上使用 purrr::map