Como concatenar as seguintes combinações de tipos:
str
estr
String
estr
String
eString
string
rust
string-concatenation
jsalter
fonte
fonte
str
e&str
são tipos diferentes e, por 99% do tempo, você só deve se preocupar&str
. Há outras perguntas detalhando as diferenças entre eles.Respostas:
Ao concatenar cadeias, você precisa alocar memória para armazenar o resultado. O mais fácil de começar é
String
e&str
:Aqui, temos uma string de propriedade que podemos mudar. Isso é eficiente, pois potencialmente nos permite reutilizar a alocação de memória. Há um caso semelhante para
String
eString
, como&String
pode ser desreferenciado como&str
.Depois disso,
another_owned_string
fica intocado (observe omut
qualificador). Há outra variante que consome oString
mas não exige que seja mutável. Esta é uma implementação daAdd
característica que leva aString
como lado esquerdo e a&str
como lado direito:Observe que
owned_string
não é mais acessível após a chamada para+
.E se quiséssemos produzir uma nova string, deixando as duas intocadas? A maneira mais simples é usar
format!
:Observe que as duas variáveis de entrada são imutáveis; portanto, sabemos que elas não são tocadas. Se quisermos fazer o mesmo para qualquer combinação de
String
, podemos usar o fato de queString
também pode ser formatado:Você não precisa usar isso
format!
. Você pode clonar uma sequência e anexá-la à nova sequência:Nota - toda a especificação de tipo que fiz é redundante - o compilador pode inferir todos os tipos em jogo aqui. Eu os adicionei simplesmente para ficar claro para as pessoas novas no Rust, pois espero que essa pergunta seja popular com esse grupo!
fonte
Add
/+
símbolo? Você pode cobrir se quiser..to_owned()
e.to_string()
foi corrigida desde o comentário acima, graças à especialização impl. Ambos agora têm o mesmo desempenho quando chamados a&str
. ConfirmaçãoPara concatenar várias cadeias de caracteres em uma única cadeia, separadas por outro caractere, há duas maneiras.
O mais legal que eu já vi é usar o
join
método em uma matriz:Dependendo do seu caso de uso, você também pode preferir mais controle:
Existem algumas maneiras mais manuais que eu já vi, algumas evitando uma ou duas alocações aqui e ali. Para fins de legibilidade, acho que os dois acima são suficientes.
fonte
join
documentado? Parece estar no meio do caminho entre uma matriz e uma string. Eu procurei na documentação da matriz e fiquei rapidamente confuso.join
está realmente ligado àSliceContactExt
característica . A característica é marcada como instável, mas seus métodos são estáveis e estão incluídos no Prelude, para que possam ser usados em qualquer lugar por padrão. A equipe parece estar ciente de que essa característica não precisa existir e eu imagino que as coisas mudarão no futuro com ela.Eu acho que esse
concat
método e+
deve ser mencionado aqui também:e também há
concat!
macro, mas apenas para literais:fonte
+
já foi mencionado em uma resposta existente . ( Esta é uma implementação doAdd
traço que leva aString
que o lado esquerdo e um&str
como o lado direito: )Maneiras simples de concatenar seqüências de caracteres no RUST
Existem vários métodos disponíveis no RUST para concatenar seqüências de caracteres
Primeiro método (Usando
concat!()
):A saída do código acima é:
Segundo método (usando
push_str()
e+
operador):A saída do código acima é:
Terceiro método (
Using format!()
):A saída do código acima é:
confira e experimente o Rust play ground
fonte