macros rust

macros - ¿Cómo prefijar/sufijo identificadores dentro de una macro?



rust (3)

[...] ¿es posible agregar un prefijo a la función?

No. Realmente, realmente no. Súper totalmente en absoluto, incluso en lo más mínimo.

Me gustaría tener un prefijo común.

Ponlos a todos en un mod lugar.

Esta pregunta ya tiene una respuesta aquí:

Cuando se usa una macro que define una función, ¿es posible agregar un prefijo a la función?

macro_rules! my_test { ($id:ident, $arg:expr) => { #[test] fn $id() { my_test_impl(stringify!($id), $arg); } } }

Por ejemplo, fn my_test_$id() {

Estoy definiendo pruebas usando un identificador que puede comenzar con números, y me gustaría usar un prefijo común.


Actualmente esto no es compatible en estable.

Sin embargo, hay una característica en las noches llamada concat_idents :

concat_idents!(my_test_, $id)

Ver

Actualización: parece que no hay planes a corto plazo para agregar esto en versiones estables, vea el problema.


Como se mencionó, debe usar submódulos para esto, pero recuerde que las macros pueden crear submódulos, los submódulos pueden anidarse permitiendo que sus nombres se superpongan, los submódulos pueden proporcionar impl y el submódulo de tests no es mágico.

Una vez envié una solicitud de extracción que evita numerosos "nombres de placa de caldera" al refactorizar el código usando estos trucos, aunque las exportaciones #[no_mangle] hacen más difícil.