新建

我们使用了impl块,将实际的代码与类型联系起来:

impl List {
    // TODO, make code happen
}

现在我们只需要弄清楚如何实际编写代码。在Rust中,我们这么声明一个函数:

fn foo(arg1: Type1, arg2: Type2) -> ReturnType {
    // body
}

我们首先需要的是一种构造列表的方式。由于我们隐藏了实现细节,我们需要以函数的形 式来提供。在Rust中,通常的方法是提供一个静态方法,也就是在impl中提供一个普通的 函数:

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

有几点说明:

  • Self是“我写在最上面的那个在impl旁边的类型”的别名。很好的避免了自己的重复。
  • 我们创建一个结构体的实例的方式与我们声明它的方式很相似,只是我们没有提供它的字 段类型,而是用值来初始化它们
  • 我们使用::来引用一个枚举的变体,这是命名间隔操作符。
  • 一个函数的最后一个表达式是隐式返回的。这使得简单的函数变得更加整洁。你仍然可以 像其他类C语言一样,使用return来提前返回。