Existe uma maneira elegante de comparar Option<Vec<u8>>
igualdade com Option<&[u8]>
? (Ou equivalente a em Result
vez de Option
.)
8
Você só precisa converter Option<Vec<u8>>
para Option<&[u8]>
, usando as_ref()
e Index
característica:
fn foo(a: Option<Vec<u8>>, b: Option<&[u8]>) -> bool {
a.as_ref().map(|x| &x[..]) == b
}
A partir do Rust 1.40, você pode usar as_deref()
:
fn foo(a: Option<Vec<u8>>, b: Option<&[u8]>) -> bool {
a.as_deref() == b
}
Vec::as_ref
meu não, provou novamente que não há um e somente um estilo em Rust;)&**x
.Talvez seja abaixo do ideal, mas esse código parece compilar:
Parque infantil
Existem duas transformações principais aqui:
A primeira opção contém o valor de propriedade, a segunda - uma referência. Portanto, devemos ir de
Option<T>
(ou&Option<T>
) paraOption<&T>
e isso é alcançado usando oas_ref
método deOption
.O primeiro
Option
agora é válido&Vec<u8>
e vamos compará-lo&[u8]
. Isso é tratado novamente peloas_ref
método, agora definido naAsRef<[u8]>
característica e implementado emVec
.fonte
first.map(Vec::as_slice) == second
?as_ref()
qualquer maneira - acabei de verificar, caso contrário não será compilado. Mas sim,Vec::as_ref
eVec::as_slice
parece ser intercambiável aqui.