Acabei de começar a aprender sobre ferrugem. Mas preciso perguntar para satisfazer minha curiosidade. Aqui vai.
Eu sei que push_str gerará erro em ambos os casos, pois não usei a palavra-chave mut em nenhum lugar.
fn main() {
let my_string1 = "Hello, world! 1";
let my_string2 = String::from("Hello, world! 2");
my_string1.push_str("My new String 1");
my_string2.push_str("My new String 2");
}
Mas estou vendo em todos os tutoriais pessoas usando String::from mas não o tornam mutável. Existe algum motivo para usar String::from se sua string não vai sofrer mutação nunca? Não podemos defini-la diretamente como my_string1 acima com o tipo &str ?
Então, basicamente, eu queria perguntar se String::from faz sentido apenas com a palavra-chave mut ?
Claro, há alguns casos em que isso pode ser útil — basicamente, sempre que você precisar especificamente de um,
String
mas não tiver um.HashMap<String, _>
porque algumas das chaves serão dinâmicas. Nesse caso, até mesmo as strings não dinâmicas precisam ser convertidas para um ownedString
. (Advertência: Você pode usarCow<str, 'static>
, que permite que você use ambos&'static str
eString
no mesmo contêiner ao custo de exigir uma ramificação para acessar o conteúdo.)String
.mut
.Tenho certeza de que alguns exemplos de tutoriais não precisam estritamente de a
String
e poderiam sobreviver com a&str
. Precisaríamos ver exemplos específicos para avaliar se esse é o caso, mas não podemos dizer categoricamente que converter a&'static str
para aString
nunca é útil.