Деян качи първо решение на 16.10.2025 19:16 (преди 14 дена)
Защо използваме &str, а не &String във fn print_str(s: &str)?
&str e по-общ тип от &String. &String имплицитно ще се конвертира до &str. Ако използвахме &String, фунцията няма да може да получава като аргуент низов литерал. Също използването на &String вместо &str се приема като много лоша практика.
Защо използваме &mut String, а не &mut str във fn append_exclamation(s: &mut String)?
Променява дължината на низа като добавим '!', което не е възможно със string slice.
Какво би станало, ако в main направиш let r1 = &s; let r2 = &mut s; едновременно — ще компилира ли? Защо?
Зависи какво правим с референциите. Ако просто сложим "let r1 = &s; let r2 = &mut s;" в main, без да ги използваме програмата, програмата ще се компирира. Защо?. Въпреки, че компилаторът да имаме &String и &mut String едновременно, животът на референцията приключва на реда, на който са създадени, защотото това е последното място, на което се ползват. Ако не се лъжа точната техническа причина е non-lexical lifetimes.
Ако референците се използват след това, тогава програмата няма да се компирира, защото rust не позволява да имаме &String и &mut String едновременно.
