是否有一种优雅的方法将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 }
Playground
这里有两个关键转换:
第一个选项保留拥有的值,第二个选项保留引用。因此,我们应该从Option<T>(或&Option<T>)转到Option<&T>,这可以通过as_ref的as_ref方法来实现。
Option<T>
&Option<T>
Option<&T>
as_ref
第一个Option现在保存为Option,我们将其与&Vec<u8>进行比较。再次由&[u8]方法处理,现在在as_ref特性上定义并在as_ref上实现。
&Vec<u8>
&[u8]
您只需要使用AsRef<[u8]>和deref特性将Vec转换为Option<Vec<u8>>:
AsRef<[u8]>
Vec
将来您可以只使用as_ref():
as_ref()