0
点赞
收藏
分享

微信扫一扫

rust enum学习记录


在以前 我浅薄的知识告诉我 枚举只能这样

enum ENUMXX
{
One,
Two
}

这就只是枚举
rust的例子一开始也很正常

match SomeOption {
None => None,
Some(i) => Some(i + 1),
}

这样解析一个Option
后来发现

pub enum List {
Empty,
Elem(i32, Box<List>),
}

他这样用来写链表,这里也还好,就是普通俩类型仍然是match
接下来

impl List {
pub fn new() -> Self {
List { head: Link::Empty }
}
}


怎么还能给他实现成员函数?
经过阅读,大概感觉这个枚举算一个结构体
new的时候实际还是创建了一个枚举对象
后面的方法基本靠match self相关的东西来做

impl List {
pub fn new() -> Self {
List { head: Link::Empty }
}

pub fn push(&mut self, elem: i32) {
let new_node = Box::new(Node {
elem: elem,
next: mem::replace(&mut self.head, Link::Empty),
});

self.head = Link::More(new_node);
}

pub fn pop(&mut self) -> Option<i32> {
match mem::replace(&mut self.head, Link::Empty) {
Link::Empty => None,
Link::More(node) => {
self.head = node.next;
Some(node.elem)
}
}
}
}

代码来自圣经


举报

相关推荐

0 条评论