Здесь новичок в ржавчине. Почему этот код работает ??

fn make_string() -> String {
    let x = String::from("world");
    x
}

fn main() {
    let s = make_string();
}

Насколько я понимаю правила, когда встречается закрывающая скобка make_string, значение x должно быть опущено, поскольку x является владельцем и выходит за рамки. Вы можете утверждать, что право собственности передается, но это, кажется, происходит после x, которое выходит за рамки.

Это особый случай функций, или я в корне неправильно понимаю правила?

0
blue_note 28 Ноя 2020 в 16:53

1 ответ

Лучший ответ

Когда вы возвращаете значение из функции, вы перемещаете значение, по сути передавая владение от этой функции родительской функции, которая имеет более широкую область действия. Поскольку область видимости теперь больше, значение не будет сброшено.

Видеть:

1
Aplet123 28 Ноя 2020 в 14:00