35个版本 (18个重大更改)

0.20.1 2023年10月27日
0.20.0 2023年1月20日
0.19.1 2021年8月14日
0.18.1 2021年7月23日

#196数据结构


用于 2 个crate

Apache-2.0

26KB
772

list-fn

一个泛型懒列表。它是一个带有延续的不可变迭代器。

懒列表可以用作标准Rust迭代器的不可变替代品。

任何 List<End = Self> 都是迭代器。任何 &mut Iterator 都是 List<End = Self>

另见 生成器

基本操作

  • FlatScan。项目顺序很重要。
    • FilterScan
    • Scan
    • 折叠
  • FlatMap。项目顺序不重要。
    • 映射
    • 过滤
    • 展平

演变

1. 迭代器

trait Iterator {
  type Item;
  fn next(&mut self) -> Option<Self::Item>;
}

trait IteratorReturn: Iterator {
  type Return;
  fn return(&mut self) -> Return;
}

2. 生成器

trait Generator {
  type Yield;
  type Return;
  fn resume(&mut self) -> GeneratorState<Self::Yield, Self::Return>;
}

enum GeneratorState<Y, R> {
  Yielded(Y),
  Complete(R),
}

3. 列表

trait List {
  type Yield;
  type Return;
  fn resume(self) -> ListState<Self>;
}

enum ListState<L: List> {
  Yielded(L::Yield, L),
  Return(L::Return),
}

FlatScan

3. 列表

trait FlatScan {
  type InputYield;
  type InputReturn;
  type OutputYield;
  type OutputReturn;
  fn map_yield(self, input_yield: Self::InputYield) -> impl List<Yield = Self::OutputYield, Return = Self>;
  fn map_return(self, input_return: Self::InputReturn) -> impl List<Yield = Self::OutputYield, Return = OutputReturn>;
}

2. 生成器

trait FlatScan {
  type InputYield;
  type InputReturn;
  type OutputYield;
  type OutputReturn;
  fn map_yield(&mut self, input_yield: Self::InputYield) -> impl Iterator<Item = Self::OutputYield>;
  fn map_return(&mut self, input_return: Self::InputReturn) -> 
    impl Generator<Item = Self::OutputYield, Return = Self::OutputReturn>;
}

1. 迭代器

trait FlatScan {
  type InputYield;
  type InputReturn;
  type OutputYield;
  type OutputReturn;
  fn map_yield(&mut self, input_yield: Self::InputYield) -> impl Iterator<Item = Self::OutputYield>;
  fn map_return(&mut self, input_return: Self::InputReturn) -> 
    impl Iterator<Item = Self::OutputYield> + IteratorReturn<Return = Self::OutputReturn>;
}

依赖项

~12KB