ExpertiDict

Rust · Intermediário · Português · Técnico

traits de closure

/ˈtɾej.tis d͡ʒi ˈklo.ʒeʁ/substantivo

Os traits Fn, FnMut e FnOnce, que dizem como uma closure usa o que capturou: só lendo, alterando ou consumindo. O compilador escolhe o mais permissivo possível.

Onde usar

Aparecem em bounds como F: FnMut() e em erros como 'expected a closure that implements Fn, but this closure only implements FnOnce'. Qualquer Fn serve onde se pede FnMut ou FnOnce, mas não o contrário.

Em código

fn chama<F: FnMut()>(mut f: F) {
  f();
  f();
}
let mut n = 0;
chama(|| n += 1);
println!("{n}");

Exemplos

Esse parâmetro pede FnMut, então a closure pode alterar o contador.

A closure consome o valor, então só é FnOnce.

Cuidado

O trait depende de como o corpo usa as variáveis capturadas, não de a closure ter move: uma closure move que só lê o valor ainda é Fn.

Sinônimos

Fn, FnMut, FnOnce

Veja também

Todos os termos de Rust