5 个版本 (1 个稳定版)
1.0.0 | 2020 年 4 月 5 日 |
---|---|
0.4.1 | 2020 年 3 月 2 日 |
0.4.0 | 2020 年 3 月 2 日 |
0.3.0 | 2019 年 7 月 16 日 |
0.0.1 | 2019 年 3 月 12 日 |
#30 in #collections
10KB
218 代码行
集合特质 (cl-traits)
又是一个通用集合库。这是没有 GAT 的最佳尝试。
许多数据结构具有独特的特性,使得创建一个适合所有情况的单个 trait
很困难,甚至不可能。这个包试图通过为每个 trait
提供一个单独的方法来绕过这种行为,以实现最大限度的灵活性和自由。
示例
use cl_traits::*;
struct SomeCustomVector(Vec<i32>, Vec<i32>);
impl Length for SomeCustomVector {
type Output = usize;
fn length(&self) -> Self::Output {
self.0.length() + self.1.length()
}
}
fn main() {
let v = SomeCustomVector(vec![1, 2], vec![3, 4, 5, 6]);
assert_eq!(v.length(), 6);
}
您可以在 examples
目录中查看更多完整的示例。
派生
派生有些受限,因为它们汇总了每个单独的属性,因此应谨慎使用。
use cl_traits::*;
use cl_traits_derive::*;
#[derive(WithLength)]
struct SomeCustomVector(Vec<i32>, Vec<i32>);
fn main() {
let v = SomeCustomVector(vec![1, 2], vec![3, 4, 5, 6]);
assert_eq!(v.length(), (2, 4));
}
依赖项
~2MB
~46K SLoC