用链表学Rust | An Ok Stack & A Persistent Stack

这是“too-many-lists”一书的第二个实现和第三个实现。之前的部分参见此文章. 源码1源码2在书中贴得很清楚,我觉得这两部分的学习重点和list本身比较独立,主要是一些相对细节的知识点,整理如下。

Option & Generic

Option的最基本使用并不难, 但是你知道这些用法吗?

  1. take()可以替代mem::replace(&mut option, None)
  2. map可以替代match option { None => None, Some(x) => Some(y) }
  3. as_ref(), as_mut()as_deref_mut()
    impl<T> Option<T> {
    	pub fn as_ref(&self) -> Option<&T>;
    }
    

Iterator

三种不同类型的Iterator:

  • IntoIter - T
  • IterMut - &mut T
  • Iter - &T

其他知识点:

  • 看报错: rustc --explain E0106
  • lifetime elision
  • turbofish

Rc& Arc

Rust的垃圾回收机制是引用计数, RcReference Counted的缩写, 是个单线程的引用计数指针. RcAtomically Reference Counted的缩写, 是个线程安全的引用计数指针. 对于如下layout:

list1 = A -> B -> C -> D
list2 = tail(list1) = B -> C -> D
list3 = push(list2, X) = X -> B -> C -> D
list1 -> A ---+
              |
              v
list2 ------> B -> C -> D
              ^
              |
list3 -> X ---+

B的所有权是共享的, 因此不能使用Box.
Rc中的重要方法: try_unwrap().

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值