Preface

rust 还是要学的, 毕竟上次把 zig 走马观花过了一遍, rust 也走马观花过一遍吧!(其实设计理念很多都有共同之处, 所以别为这个吵架了!)

All is expression

Difference and improvements

exercism.org 上面刷题的时候遇到的神奇的快捷操作

滑动窗口

fn windows(&self, size: usize) -> Windows<'_, T>;

Windows 的定义:

pub struct Windows<'a, T: 'a> {
    v: &'a [T],
    size: NonZeroUsize,
}

全称与存在

fn any<F: FnMut(Self::Item)>(&mut self, f: F) -> bool;
fn all<F: FnMut(Self::Item)>(&mut self, f: F) -> bool;

与子集结合可以做到快速判断子集(写代码快)

#[derive(Debug, PartialEq, Eq)]
pub enum Comparison {
    Equal,
    Sublist,
    Superlist,
    Unequal,
}

pub fn sublist<T: PartialEq>(_first_list: &[T], _second_list: &[T]) -> Comparison {
    use Comparison::*;
    match (_first_list.len(), _second_list.len()) {
        (0, 0) => Equal,
        (0, _) => Sublist,
        (_, 0) => Superlist,
        (a,b) if a>b => if _first_list.windows(b).any(|sub| sub==_second_list) {Superlist} else {Unequal},
        (a,b) if a<b => if _second_list.windows(a).any(|sub| sub==_first_list) {Sublist} else {Unequal},
        _ => if _first_list==_second_list {Equal} else {Unequal}
    }
}

Todo

全部简单地过了一遍

  • macro!
  • Generic
  • mod/traits/struct
  • async/futures
  • Error
  • Option

Difference & better

  • loop
  • if/while let
  • borrow/move/…
  • Rc/Arc
  • Box