Rust
Author

(Milanesi, 2022, pp. 4-5)

Impresión de combinaciones de cadenas literales

En lugar de utilizar una única cadena literal, puedes imprimir varias de ellas, incluso en una sola declaración, de esta manera:

print!("{}, {}!", "Hello", "world");

Esta declaración, colocada entre llaves de la función principal, se imprimirá nuevamente: ¡Hola, mundo!.

En este caso, la macro print recibe tres argumentos, separados por comas. Los tres argumentos son cadenas literales. Sin embargo, la primera cadena contiene dos pares de llaves ({}). Son marcadores de posición que indican las posiciones en las que insertar las otras dos cadenas.

Entonces, la macro escanea los argumentos después del primero, y para cada uno de ellos busca dentro del primer argumento un par de llaves y reemplaza ese par de llaves con el argumento actual.

Esto se asemeja a la siguiente instrucción del lenguaje C:

printf("%s, %s!", "Hello", "world");

Pero hay una diferencia importante. Si intentas compilar:

print!("{}, !", "Hello", "world");

obtienes el error de compilación argumento nunca usado, ya que el primer argumento contiene solo un marcador de posición, pero después del primer argumento, hay dos argumentos más para imprimir. Entonces, hay un argumento que no tiene ningún marcador de posición correspondiente.

Y si intentas compilar:

print!("{}, {}!", "Hello");

También obtienes un error de compilación, ya que el primer argumento contiene dos marcadores de posición, pero después del primer argumento solo hay un argumento para imprimir. Entonces, hay un argumento que no tiene ningún marcador de posición correspondiente.

Y si intentas compilar:

print!("{}, {}!", "Hello");

También se produce un error de compilación, ya que el primer argumento contiene dos marcadores de posición, pero después de dicho argumento solo hay uno para imprimir. Por tanto, hay un marcador de posición que no tiene ningún argumento correspondiente.

En cambio, las declaraciones correspondientes en lenguaje C generalmente generan solo una advertencia y luego generan un programa compilado que se comportará mal.

Back to top