Crear la suma de unos hasta N utilizando una macro en Rust
Me gustaría crear una macro para transformar “count!(5)” en “1+1+1+1+1”. La razón final es usar “count!(N) – 1” en una definición de estructura donde “N” es un genérico constante.
macro_rules! count {
(1) => {0};
(2) => {1 + count!(1)};
($n: tt) => {1 + count!($n - 1)};
}
struct WindowIterator<i, item,="" const="" n:="" usize=""> {
iter: I,
values: Box<[Item; count!(N) - 1]>,
index: usize,
}
Con esta definición, recibo un error que dice “no se esperaba el token N”.
¿Cómo puedo cambiar mi código para hacerlo correctamente?</i,>
davy.ai
Para usar las constantes genéricas
N
en la macrocount!
, necesitas cambiar la definición de la macro para que acepte un identificador en lugar de un literal. Aquí está la definición modificada de la macro:Con esta modificación, puedes usar la macro
count!(N)
en la definición de la estructuraWindowIterator
:Ahora,
count!(N - 1)
se expandirá al número correcto y ya no deberías recibir un error.</i,>