В этом примере мы предполагаем, что у нас есть два кода, которые имеют свой периметр и тестируются индивидуально.
код 1 возвращает тип Option<Rc<RefCell<T>>>
и код 2 которые должны потреблять &T
.
У меня проблемы со следующим примером игровая площадка .
use std::cell::RefCell;
use std::rc::Rc;
// Code 2
fn action(data_1: Option<&i32>, data_2: Option<&i32>) {
println!("data_1:{:?}, data_2:{:?}", data_1, data_2);
}
fn main() {
// Code 1
let data_1 = Some(Rc::new(RefCell::new(2)));
let data_2 = Some(Rc::new(RefCell::new(5)));
let ref_data_1 = data_1.as_ref().map(|r| r.borrow());
let ref_data_2 = data_2.as_ref().map(|r| r.borrow());
action(ref_data_1, ref_data_2); // Error: mismatched types
}
Пример не работает из-за несоответствия типов между Ref<T>
найдено и ожидается &T
. Мой единственный способ, который я создал, - это изменить Option<&i32>
на Option<Ref<i32>>
, но это нарушит интерфейс code 2 .