比较Option >与Option

问题描述 投票:0回答:2

是否有一种优雅的方法将Option<Vec<u8>>Option<&[u8]>的相等性进行比较? (或等效地用Result代替Option。)

rust
2个回答
2
投票

也许不是最理想的,但是这段代码似乎可以编译:

fn cmp(first: Option<Vec<u8>>, second: Option<&[u8]>) -> bool {
    first.as_ref().map(Vec::as_ref) == second
}

Playground

这里有两个关键转换:

  1. 第一个选项保留拥有的值,第二个选项保留引用。因此,我们应该从Option<T>(或&Option<T>)转到Option<&T>,这可以通过as_refas_ref方法来实现。

  2. 第一个Option现在保存为Option,我们将其与&Vec<u8>进行比较。再次由&[u8]方法处理,现在在as_ref特性上定义并在as_ref上实现。


1
投票

您只需要使用AsRef<[u8]>和deref特性将Vec转换为Option<Vec<u8>>

Option<&[u8]>

将来您可以只使用as_ref()

as_ref()
© www.soinside.com 2019 - 2024. All rights reserved.