005 Desarrollo
005.1 Desarrollo

Impresión de combinaciones de cadenas literales

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

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

Esta declaración, colocada dentro de las llaves de la función main, 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 donde se insertarán 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 parece a la siguiente declaración en 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 primero hay dos argumentos más para imprimir. Por lo tanto, 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 del primero solo hay un argumento para imprimir. Por lo tanto, hay un marcador de posición que no tiene ningún argumento correspondiente.

En cambio, las declaraciones correspondientes en lenguaje C generalmente sólo generan una advertencia y luego un programa compilado que funcionará mal.