Ивайло качи първо решение на 20.10.2025 15:20 (преди 10 дена)
В принтиращата функция ползваме &str, а не &String понеже &str e string slice или view на един String, &str е read only представяне на низ (По - точно съдържа указател към началото на slice-а и дължината му в байтове), което би било по - удобно на принтираща функция, понеже не се очаква от нея да променя низа и бихме могли да подаваме и string литерали.
В конкатениращата функция ползваме &mut String, а не &mut str понеже String е динамично заделен обект в heap паметта, чийто размер ще променим във функцията по време на конкатенацията, нещо, което не можем да направим със &mut str където можем да променяме само вече съществуващите байтове от низа.
В случая, добавянето на "let r1 = &s; let r2 = &mut s;" в main функцията няма да доведе до компилационна грешка, защото 's' е mutable променлива като не пречи да вземем нейна immutable и mutable референция. Щеше да е проблем ако 's' беше immutable и се пробваме да вземем mutable референция.
