11 个版本
0.3.1 | 2021年1月5日 |
---|---|
0.3.0 | 2020年10月21日 |
0.2.1 | 2020年10月15日 |
0.1.6 | 2020年10月14日 |
#2195 in Rust 模式
1,269 monthly downloads
用于 5 个 crate (3 直接)
26KB
384 行
slyce
Сlyce 为 Rust 实现了一个类似于 Python 的切片器。
索引可以按绝对位置或相对于数组末尾(尾部)进行寻址。超出范围的索引将被忽略。
切片索引通过一个枚举表示,该枚举封装了完整的 usize
范围,同时也捕获了“负”或“反向”索引的可能性。这个包为一些常见类型提供了一些 From<T> for Index
实现,因此您可以用数字和选项代替 Index(只需调用 .into()
即可)。
示例
use slyce::{Slice, Index};
let v = vec![10,20,30,40,50];
let render = |s: Slice| format!("{:?}", s.apply(&v).collect::<Vec<_>>());
let start: isize = -3;
let s = slyce::Slice{start: start.into(), end: Index::Default, step: None};
assert_eq!(render(s), "[30, 40, 50]");
let s = slyce::Slice{start: Index::Tail(3), end: Index::Default, step: None};
assert_eq!(render(s), "[30, 40, 50]");
let end: Option<isize> = None;
let s = slyce::Slice{start: Index::Tail(3), end: end.into(), step: None};
assert_eq!(render(s), "[30, 40, 50]");
let s = slyce::Slice{start: Index::Tail(3), end: Index::Default, step: Some(-1)};
assert_eq!(render(s), "[30, 20, 10]");
let s = slyce::Slice{start: Index::Head(4), end: Index::Head(0), step: Some(-1)};
assert_eq!(render(s), "[50, 40, 30, 20]");
let s = slyce::Slice{start: Index::Default, end: Index::Head(0), step: Some(-1)};
assert_eq!(render(s), "[50, 40, 30, 20]");
let s = slyce::Slice{start: Index::Tail(1000), end: 2000.into(), step: None};
assert_eq!(render(s), "[10, 20, 30, 40, 50]");
开发
模糊测试
安装 cargo-fuzz
$ cargo install cargo-fuzz
运行模糊测试器
$ cargo +nightly fuzz run fuzz_target_1
文档
Slyce 使用 Rust 文档注释对源文件进行文档说明。README.md 文件是通过结合 README.tpl 文件和 rustdoc 注释生成的。
$ cargo install cargo-readme
$ ./scripts/gen-readme.sh
README.tpl 文件应包含有关项目治理和工具的文档,而内联的 rustdoc 注释应从用户消费 crate 的角度记录项目实际执行的操作。
许可证
BSD-2-Clause
依赖关系
~235KB