在以前 我浅薄的知识告诉我 枚举只能这样
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)
}
}
}
}
代码来自圣经