1个不稳定版本
0.1.0 | 2020年3月19日 |
---|
#18 in #ready
172 每月下载量
在 3 crates 中使用
23KB
425 行
array-ops
为数组数据类型提供现成的默认方法实现。
概述
此crate提供了一系列特质,为标准库中的大多数数组类型数据结构的函数提供了默认实现。要将其应用于您自己的数组类型数据结构,您只需要实现HasLength
和Index<usize>
(以及IndexMut<usize>
用于可变操作),这意味着您需要一个len()
方法和一个index()
方法,而Array
特质将为其他所有内容提供默认方法,仅使用这两个方法实现。
文档
示例
# use array_ops::*;
# use std::ops::{Index, IndexMut};
#[derive(PartialEq, Eq, Debug)]
struct MyNewtypedVec<A>(Vec<A>);
impl<A> From<Vec<A>> for MyNewtypedVec<A> {
fn from(vec: Vec<A>) -> Self {
Self(vec)
}
}
impl<A> HasLength for MyNewtypedVec<A> {
fn len(&self) -> usize {
self.0.len()
}
}
impl<A> Index<usize> for MyNewtypedVec<A> {
type Output = A;
fn index(&self, index: usize) -> &A {
self.0.index(index)
}
}
impl<A> IndexMut<usize> for MyNewtypedVec<A> {
fn index_mut(&mut self, index: usize) -> &mut A {
self.0.index_mut(index)
}
}
impl<A> Array for MyNewtypedVec<A> {}
impl<A> ArrayMut for MyNewtypedVec<A> {}
# fn main() {
let mut my_vec = MyNewtypedVec::from(vec![3, 1, 3, 3, 7]);
assert!(my_vec.starts_with(&[3, 1, 3]));
my_vec.sort_unstable();
let expected = MyNewtypedVec::from(vec![1, 3, 3, 3, 7]);
assert_eq!(expected, my_vec);
# }
许可证
版权所有 2020 Bodil Stokke
此软件受Mozilla公共许可证(v. 2.0)的条款约束。如果此文件未附带MPL副本,您可以在http://mozilla.org/MPL/2.0/ 获取一个。
行为准则
请注意,该项目以贡献者行为准则发布。通过参与此项目,您同意遵守其条款。
依赖项
~140KB