Avatar ·

Por que existem tipos anônimos únicos em Rust e como trabalhar com eles?

Olá a todos! Comecei a estudar Rust recentemente e tive uma dificuldade de entendimento com o conceito de tipos anônimos. Li que em Rust cada literal de closure tem seu próprio tipo único e não nomeável. Por exemplo, este código: ```rust let add_one = |x: i32| x + 1; let double = |x: i32| x * 2; ``` Entendo que `add_one` e `double` são closures diferentes com tipos diferentes. Mas por que isso foi feito? Em C++ ou outras linguagens, posso simplesmente declarar um ponteiro para função ou usar `std::function`. Por que Rust seguiu o caminho de criar tipos anônimos únicos? Parece-me que isso complica a escrita de código genérico, especialmente quando quero passar uma closure para uma função ou armazená-la em uma struct. Por exemplo, não posso simplesmente escrever: ```rust fn apply(f: ???, x: i32) -> i32 { f(x) } ``` Preciso usar genéricos ou `Box`. Isso é normal? Ou estou perdendo algo? Como projetar código considerando essa característica? Agradeço explicações com exemplos.