有没有一种比较Option<Vec<u8>>平等的优雅方法Option<&[u8]>?(或等效于Result而不是Option。)
Cer*_*rus 11
也许它不是最理想的,但是这段代码似乎可以编译:
fn cmp(first: Option<Vec<u8>>, second: Option<&[u8]>) -> bool {
first.as_ref().map(Vec::as_ref) == second
}
Run Code Online (Sandbox Code Playgroud)
这里有两个关键的转换:
第一个期权持有拥有的价值,第二个期权持有参考价值。因此,我们应该从Option<T>(或&Option<T>)转到Option<&T>,这是使用的as_ref方法实现的Option。
现在第一个Option成立&Vec<u8>,我们将与之比较&[u8]。as_ref现在由AsRef<[u8]>trait 定义并在上实现的方法再次对此进行处理Vec。
您只需要使用和特质转换Option<Vec<u8>>为Option<&[u8]>,as_ref()Index
fn foo(a: Option<Vec<u8>>, b: Option<&[u8]>) -> bool {
a.as_ref().map(|x| &x[..]) == b
}
Run Code Online (Sandbox Code Playgroud)
将来您可以使用as_deref():
fn foo(a: Option<Vec<u8>>, b: Option<&[u8]>) -> bool {
a.as_deref() == b
}
Run Code Online (Sandbox Code Playgroud)