Avatar ·

Existe em Rust uma operação de módulo (e não resto da divisão)?

Olá a todos! Recentemente comecei a estudar Rust, vindo do Python, e me deparei com um problema inesperado. Em Python, estou acostumado que o operador `%` sempre retorna um resultado não negativo, ou seja, o módulo matemático do número. Por exemplo, `(-5) % 3` em Python resulta em `1`. Isso é muito útil para índices cíclicos, trabalho com horas, dias da semana e qualquer aritmética de anel. Mas em Rust, o operador `%`, como descobri, retorna o resto da divisão (remainder), não o módulo. E para números negativos ele se comporta de forma diferente: `(-5) % 3` em Rust resulta em `-2`. Isso quebra toda a minha lógica! Estou escrevendo uma função simples para deslocar um índice em um 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 } ``` Quando `delta` é negativo, o código falha com erro ou retorna um resultado incorreto. Eu entendo que são operações matemáticas diferentes, mas preciso exatamente do módulo clássico (para que o resultado esteja sempre no intervalo `[0, n-1]`).