rust - 通用`impl的Rust trait implKaitaiStream for T {}`
问题描述
我对这条锈迹感到困惑:
impl<T: Read + Seek> KaitaiStream for T {}
看起来它正在尝试KaitaiStream
为某些结构“T”实现。
但是 T 是未知的,那么这条线是什么意思呢?这是否意味着所有实现的东西Read + Seek
现在也将实现KaitaiStream
?
解决方案
语法分解为:implement KaitaiStream
for all types T
that implementation both Read
and Seek
。
请注意,特征本身是这样定义的:
pub trait KaitaiStream: Read + Seek {
// methods...
}
这意味着: 的所有实现也KaitaiStream
必须实现Read
and Seek
。
这些东西一起有效地构成KaitaiStream
了Read + Seek
. 实现的任何类型都KaitaiStream
必须实现Read + Seek
,并且实现的任何类型都“免费”Read + Seek
获得实现。KaitaiStream
由于它的定义方式,方法 ofKaitaiStream
只能[1]使用and的方法,因此它提供这些方法的所有默认实现是有意义的。Read
Seek
[1] Rust 的未来版本将包括trait specialization,这将允许您为特定类型额外实现更有效(或只是不同)的实现。如果没有specialization
,这些实现将与默认值冲突并且不允许。
推荐阅读
- c++ - boost::asio::async_write_some - sequential function call
- sql - SQL Need days of selected week as columns
- javascript - 从 UInt8Array (react-pdf) 在 React 中显示 PDF 的问题
- java - 为另一个操作系统创建一个 Spring Native 应用程序
- c# - 当前上下文中不存在名称“Helper”,Blazor 的 Plotly 库
- python - 时间序列的傅里叶变换 (fft),但已清理数据的两端相互靠近
- python - 需要从一个数据帧中查找数据,看看它是否在 Pandas [Python] 中是另一个数据帧
- python - 用逗号格式化数字
- mysql - 如何从 Object(在 nodeJS 中)插入 mysql 行?
- python - 芹菜链无故停在中间(AWS Redis db、RabbitMQ broker)