Метод new
Чтобы связать написанный код с типом, используем блоки impl:
impl List {
// воплотить код в жизнь
}
Разберёмся, как писать код правильно. В Rust объявление функции выглядит так:
fn foo(arg1: Type1, arg2: Type2) -> ReturnType {
// тело
}
Первая вещь, которая нам нужна: способ создания (конструирования) списка.
Поскольку мы спрятали детали реализации, эту возможность надо предоставить, как функцию.
В Rust для этого пишут статический метод, который по сути является обычной функцией внутри блока impl:
impl List {
pub fn new() -> Self {
List { head: Link::Empty }
}
}
Несколько замечаний по поводу кода:
Self— это псевдоним для «того тип, который я написал в заголовкеimpl». Отличный способ не повторяться!- Мы создаём экземпляр структуры практически также, как объявляем её, за исключением того, чтобы вместо указания типов полей, мы инициализируем их значениями.
- Мы ссылаемся на варианты перечисления, используя
::, то есть оператор указания пространства имён. - Последнее выражение функции считается её результатом.
Такой подход позволяет делает простые функции лаконичными.
Но всё ещё можно использовать
returnдля досрочного возврата из функции, как и в других C-подобных языках.