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.