¿Existe en Rust una operación de módulo (y no resto de la división)?
¡Hola a todos! Recientemente comencé a aprender Rust, viniendo de Python, y me encontré con un problema inesperado. En Python estoy acostumbrado a que el operador `%` siempre devuelve un resultado no negativo, es decir, el módulo matemático del número. Por ejemplo, `(-5) % 3` en Python da `1`. Esto es muy útil para índices cíclicos, trabajo con horas, días de la semana y cualquier aritmética de anillo.
Pero en Rust, el operador `%`, como descubrí, devuelve el resto de la división (remainder), no el módulo. Y para números negativos se comporta de manera diferente: `(-5) % 3` en Rust da `-2`. ¡Esto rompe toda mi lógica! Estoy escribiendo una función simple para desplazar un índice en un array:
```rust
fn shift_index(current: usize, delta: i32, len: usize) -> usize {
let new_index = (current as i32 + delta) % len as i32;
new_index as usize
}
```
Cuando `delta` es negativo, el código falla con un error o da un resultado incorrecto. Entiendo que son operaciones matemáticas diferentes, pero necesito el módulo clásico (para que el resultado esté siempre en el rango `[0