Возможно, это неоптимально, но этот код, похоже, компилируется:
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
метода Option
.
Первый Option
теперь содержит &Vec<u8>
, и мы собираемся сравнить его с &[u8]
. Это снова обрабатывается методом as_ref
, теперь определенным для черты AsRef<[u8]>
и реализованным для Vec
.