有没有一种优雅的方式来比较
Option<Vec<u8>>
和 Option<&[u8]>
的相等性?(或等价地,用 Result
替换 Option
。)Option<Vec<u8>>
和 Option<&[u8]>
的相等性?(或等价地,用 Result
替换 Option
。)fn cmp(first: Option<Vec<u8>>, second: Option<&[u8]>) -> bool {
first.as_ref().map(Vec::as_ref) == second
}
这里有两个关键的转换:
你只需要使用as_ref()
和Index
特质,将Option<Vec<u8>>
转换为Option<&[u8]>
:
fn foo(a: Option<Vec<u8>>, b: Option<&[u8]>) -> bool {
a.as_ref().map(|x| &x[..]) == b
}
在Rust 1.40及以后的版本中,你可以使用as_deref()
方法:fn foo(a: Option<Vec<u8>>, b: Option<&[u8]>) -> bool {
a.as_deref() == b
}
Vec::as_ref
,而我的没有,再次证明 Rust 中并不存在一种风格。;) - Stargateur&**x
。 - Sven Marnach
first.map(Vec::as_slice) == second
? - Timmmmas_ref()
- 我刚刚检查了,否则它将无法编译。但是,Vec::as_ref
和Vec::as_slice
在这里似乎是可以互换的。 - Cerberus