¿Cómo concateno las siguientes combinaciones de tipos:
strystrStringystrStringyString
string
rust
string-concatenation
jsalter
fuente
fuente

stry&strson diferentes tipos y durante el 99% del tiempo, solo debe preocuparse&str. Hay otras preguntas que detallan las diferencias entre ellos.Respuestas:
Cuando concatena cadenas, necesita asignar memoria para almacenar el resultado. Lo más fácil para empezar es
Stringy&str:Aquí, tenemos una cadena propia que podemos mutar. Esto es eficiente ya que potencialmente nos permite reutilizar la asignación de memoria. Hay un caso similar para
StringyString, como&Stringse puede desreferenciar como&str.Después de esto,
another_owned_stringno se ha tocado (nota sinmutcalificador). Hay otra variante que consume elStringpero no requiere que sea mutable. Esta es una implementación delAddrasgo que toma aStringcomo el lado izquierdo y a&strcomo el lado derecho:Tenga en cuenta que
owned_stringya no se puede acceder después de la llamada a+.¿Qué pasaría si quisiéramos producir una nueva cadena, dejando ambas sin tocar? La forma más simple es usar
format!:Tenga en cuenta que ambas variables de entrada son inmutables, por lo que sabemos que no se tocan. Si quisiéramos hacer lo mismo para cualquier combinación de
String, podemos usar el hecho de queStringtambién se puede formatear:Sin embargo, no tienes que usar
format!. Puede clonar una cadena y agregar la otra cadena a la nueva cadena:Nota : toda la especificación de tipo que hice es redundante: el compilador puede inferir todos los tipos en juego aquí. ¡Los agregué simplemente para que sean claros para las personas nuevas en Rust, ya que espero que esta pregunta sea popular entre ese grupo!
fuente
Add/+símbolo? Podrías cubrirlo si quieres..to_owned()y.to_string()se ha solucionado desde el comentario anterior gracias a la especialización implícita. Ambos ahora tienen el mismo rendimiento cuando se les llama a&str. CompromisoPara concatenar múltiples cadenas en una sola cadena, separadas por otro carácter, hay un par de formas.
Lo mejor que he visto es usar el
joinmétodo en una matriz:Dependiendo de su caso de uso, también puede preferir más control:
He visto algunas formas más manuales, algunas evitando una o dos asignaciones aquí y allá. Para propósitos de legibilidad, encuentro que los dos anteriores son suficientes.
fuente
joindocumentado? Parece estar a medio camino entre una matriz y una cadena. Busqué en la documentación de la matriz y rápidamente me confundí.joinse une realmente a laSliceContactExtcaracterística . El rasgo está marcado como inestable, pero sus métodos son estables y están incluidos en el Preludio, por lo que pueden usarse en todas partes de forma predeterminada. El equipo parece ser muy consciente de que este rasgo no necesita existir e imagino que las cosas cambiarán en el futuro con él.Creo que ese
concatmétodo y+debería mencionarse aquí también:y también hay
concat!macro pero solo para literales:fuente
+ya se menciona en una respuesta existente . ( Esta es una implementación de laAddcaracterística que tomaStringcomo el lado de la mano izquierda y una&strcomo el lado derecho: )Formas simples de concatenar cadenas en RUST
Hay varios métodos disponibles en RUST para concatenar cadenas
Primer método (usando
concat!()):La salida del código anterior es:
Segundo método (usando
push_str()y+operador):La salida del código anterior es:
Tercer método (
Using format!()):La salida del código anterior es:
échale un vistazo y experimenta con Rust Play Ground
fuente