Gostaria de saber se é possível usar if let Ok()
sintaxe no Result<Tuple(Struct, usize), DecodeError>
tipo retornado da bincode::decode_from_slice
função de bincode
crate https://docs.rs/bincode/2.0.0-rc.3/bincode/fn.decode_from_slice.html que requer anotações de tipo explícitas
Eu tentei a seguinte sintaxe
struct A {
a: i32,
b: i32,
}
let mut recv_buff = [0u8; 1024];
if let Ok((a_obj, _): (A, usize)) = bincode::decode_from_slice(recv_buff, bincode::config::standard().with_big_endian()) {
}
Erro
if let Ok((a_obj, _): (A, usize)) = bincode::decode_from_slice(recv_buff, bincode::config::standard()....
| ^ expected one of `)`, `,`, or `|`
Você não pode adicionar anotações a
if let
, mas pode apenas especificar o tipo genérico desejado.Embora Rust não permita a atribuição de tipo dentro do padrão, ainda é muito flexível em relação às anotações de tipo. A outra resposta mostra como especificar o tipo usando turbofish on
decode_from_slice()
, mas você também pode:Result::Ok
variante enum:A última forma é muito útil quando você precisa especificar o tipo de uma
for
variável de loop.