scielo posterolateral posterior musculares muscular libro evaluacion estiramientos estatica ejercicios cadenas cadena articulos rust

rust - posterolateral - evaluacion de cadenas musculares pdf



Cómo crear una cadena estática en tiempo de compilación (2)

Hay bastantes formas de hacerlo. Puede cargar una cadena pregenerada del archivo si lo desea:

const DATA: &''static str = include_str!("filename.txt");

¡O para hacerlo durante la compilación puede usar concat! :

const DATA: &''static str = concat!("abc", "abc");

Quiero crear una &''static str larga &''static str hecha de secuencias repetitivas de caracteres, por ejemplo, abcabcabc...

¿Hay alguna forma en Rust de hacer esto a través de una expresión, por ejemplo, algo como long_str = 1000 * "abc" en Python, o tengo que generarlo en Python y copiarlo / pegarlo en el código Rust?


No puedes hacer tal cosa en Rust estable. Su ejemplo de 1000 * "abc" tampoco se ejecuta en "tiempo de compilación" en Python, hasta donde yo entiendo Python.

Incluyendo un archivo

Si tiene que ser estático, puede usar un script de construcción de Cargo . Este es un poco de código Rust que puede hacer muchas cosas antes de que su código se compile realmente. Específicamente, puede escribir un archivo fuente que tenga su cadena y luego usar include_str! para llevarlo a su caja:

build.rs

use std::{ env, error::Error, fs::File, io::{BufWriter, Write}, path::Path, }; fn main() -> Result<(), Box<Error>> { let out_dir = env::var("OUT_DIR")?; let dest_path = Path::new(&out_dir).join("long_string.txt"); let mut f = BufWriter::new(File::create(&dest_path)?); let long_string = "abc".repeat(100); write!(f, "{}", long_string)?; Ok(()) }

lib.rs

static LONG_STRING: &''static str = include_str!(concat!(env!("OUT_DIR"), "/long_string.txt"));

Inicialización perezosa

Podría crear un valor lazy_static que tendría su cadena que se crearía solo una vez. Esto se hace en tiempo de ejecución, pero solo una vez.

Ver también:

  • ¿Cómo puedes hacer un singleton estático seguro en Rust?
  • ¿Cómo creo un singleton global mutable?

El futuro lejano

En algún momento, RFC 911 se implementará completamente. Esto, más un puñado de RFC adicionales, cada uno con una nueva funcionalidad, le permitirá escribir algo como:

// Does not work yet! static LONG_STR: String = "abc".repeat(1000);