В чем разница между этими строками в RUST? - PullRequest
0 голосов
/ 11 октября 2019

в чем разница между этими двумя сценариями У меня одинаковая функциональность с 2 разными моделями и это меня немного смущает!

//model_1

let mut my_str = String::from("ali");
let str1 = &mut my_str; // defining str1 without "mut"

//model_2

let mut my_str = String::from("ali");
let mut str1 = &mut my_str // defining str1 with "mut"

1 Ответ

0 голосов
/ 11 октября 2019

Давайте начнем со схожести: ни один из них не компилируется, потому что вы не можете получить изменяемую ссылку (&mut) объекта, который сам не определен как mut.

Что касается правильная версия, это следующее:

let mut my_str = String::from("ali");
let str2 = &mut my_str;

my_str необходимо определить как изменяемый, если мы хотим получить изменяемую ссылку на него, чтобы первая строка была однозначной.

Во второй строке префикс mut к str2 необходим только в том случае, если вы собираетесь изменить ссылку, на которую указывает str2. Пока вы только изменяете содержимое строки (без изменения какой строки вы изменяете), вам это не нужно.

...