заимствования?
код полностью: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%0A%0Afn+main%28%29+%7B%0A++++println%21%28%22Start%3A+main%28%29%3B%22%29%3B%0A++++my_func%28%29%3B%0A%7D%0A%0Afn+my_func%28%29+%7B%0A++++let+mut+i+%3D+0%3B%0A++++let+mystring%3A+%26str+%3D+%22Test+string+from+stack%22%3B%0A++++let+mut+mutual_string%3A+String+%3D+String%3A%3Afrom%28%22Stop+string+%7BN%7D%22%29%3B%0A++++%0A++++loop+%7B%0A++++++++println%21%28%22Hello+%7B%7D%22%2C+i%29%3B%0A++++++++i+%3D+i+%2B+1%3B%0A++++++++if+i+%3D%3D+10+%7B%0A++++++++++++mutual_string+%3D+mutual_string.replace%28%22%7BN%7D%22%2C+i.to_string%28%29%29%3B%0A++++++++++++println%21%28%22Stop%3A+%7B%7D%22%2C+mystring%29%3B%0A++++++++++++println%21%28%22Stop%3A+%7B%7D%22%2C+mutual_string%29%3B%0A++++++++++++break%3B%0A++++++++%7D%0A++++++++%2F%2Fbreak%3B%0A++++%7D%0A++++%0A++++%0A++++%0A%7D
работает, если написать &i:
mutual_string = mutual_string.replace("{N}", &i.to_string());
не работает, если не писать:
mutual_string = mutual_string.replace("{N}", i.to_string());
выдает ошибку:
expected &str, found String
компилятор всё чётко сказал - нужна ссылка
&str - ссылка на строку String? я понял по прочтению доки что &str это срез на значение в стеке, а не тип ссылки на String
компилятор так хорошо устроен, что он легко превращает &String в &str. а так &str независим от String, это просто ссылка на str
в моем примере он ругается: expected &str, found String . т.е. он не перевел String в &str. Итого я понял так, что причина в том, что сам метод .replace() принимает вторым аргументом только &str
потому что он может String в &str перевести буквально. можно str -> String (.to_string() ИЛИ .to_owned()) &String -> &str (если не ошибаюсь, то это делает трейт Deref)
Обсуждают сегодня