我有这个结构:
struct Test {
data: Vec<u8>,
}
impl Test {
fn new() -> Self {
return Test { data: Vec::new() };
}
}
let a = Test::new();
// populate something into a...
Run Code Online (Sandbox Code Playgroud)
我想为这种类型实现切片,在执行 eg 时&a[2..5],它返回一个指向2..5其内部的切片data。可以在 Rust 中做到这一点吗?
您可以通过实现Index特征并将索引限制为SliceIndex:
struct Test {
data: Vec<u8>,
}
impl Test {
fn new(data: Vec<u8>) -> Self {
Test { data }
}
}
impl<Idx> std::ops::Index<Idx> for Test
where
Idx: std::slice::SliceIndex<[u8]>,
{
type Output = Idx::Output;
fn index(&self, index: Idx) -> &Self::Output {
&self.data[index]
}
}
fn main() {
let test = Test::new(vec![1, 2, 3]);
let slice = &test[1..];
assert_eq!(slice, [2, 3]);
let first = &test[0];
assert_eq!(first, &1);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1951 次 |
| 最近记录: |