Создание объекта

Создание объекта

Новый объект создаётся через ключевое слово struct.

struct Worker {
    name: String,
}

fn main() {
    let manager     = Worker { name: "Мария".to_string() };
    let programming = Worker { name: "Дмитрий".to_string() };

    println!("Менеджер: {}", manager.name);
    println!("Программист: {}", programming.name);
}

В результате будет выведено следующее:

Менеджер: Мария
Программист: Дмитрий

Создание метода

Методы для объекта создаются через ключевое слово impl.

struct Worker {
    name: String,
}

impl Worker {
    fn say_hi(&self) -> String {
        return "Привет ".to_string() + &self.name.to_string();
    }
}


fn main() {
    let manager     = Worker { name: "Мария".to_string() };
    let programming = Worker { name: "Дмитрий".to_string() };

    println!("{}", manager.say_hi());
    println!("{}", programming.say_hi());
}

Стоит обратить внимание, что методы надо называть в формате «method_name», иначе Rust вернёт предупреждение «method should have a snake case name».

В результате будет выведено следующее:

Привет Мария
Привет Дмитрий

Изменение свойства объекта

По умолчанию, свойства объекта не изменяемы.

struct Point {
    x: i32,
    y: i32,
}

fn main() {
    let point = Point {x: 5, y: 10}

    // попытка изменить свойство
    point.x = 10; // ошибка — cannot assign to immutable field `point.x`
}

Чтобы можно было изменить свойство объекта, надо добавить ключевое слово mut.

struct Point {
    x: i32,
    y: i32,
}

fn main() {
    let mut point = Point {x: 5, y: 10}

    // попытка изменить свойство
    point.x = 10; // point.x теперь равен «10»
}