Originalmente, pensei que o primeiro era apenas uma reexportação do último, mas parece que não é o caso. Qual é a diferença entre as duas pin!
macros e como decidir qual usar?
relate perguntas
-
os braços de correspondência têm tipos incompatíveis esperados ao reutilizar a função dentro da correspondência
-
Conversão de tipo de ferrugem em uma instrução de correspondência
-
Como forçar o tipo de retorno de uma correspondência para ()?
-
enums de ferrugem em representações primitivas
-
Existe uma maneira de simplificar a correspondência diretamente para Ok("VAL") em Result<String, VarError>
tokio::pin!()
é mais antigo, então se você precisar dar suporte a uma versão do Rust anterior à 1.68.0, você deve usá-lo ou uma macro similar de uma caixa alternativa (por exemplo,futures::pin_mut!()
).A principal diferença é que std's
pin!()
é mais confortável e mais conveniente. Todas as macros de terceiros sãopin!()
uma das duas formas:(Frequentemente com recursos convenientes, como declarar múltiplas variáveis em uma chamada de macro). Enquanto std's
pin!()
tem o formato:Além de ter uma aparência melhor (parece mais uma chamada de função do que uma macro personalizada), ele também tem a capacidade única de ser colocado em qualquer posição de expressão, por exemplo, em chamadas de função:
Embora se o valor de retorno da função for emprestado do local fixado, isso não será compilado.
Std explora seu status especial para fazer isso. Além dele, nenhuma crate pode criar tal macro que será utilizável em declarações de variáveis e expressões (embora duas macros separadas pudessem ser criadas). Então crates optou por fornecer apenas a primeira.