#traits #collection

cl-traits-derive

cl-traits 的派生

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

Apache-2.0

10KB
218 代码行

集合特质 (cl-traits)

CI crates.io Documentation License Rustc

又是一个通用集合库。这是没有 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