Я новичок в Rust и пытаюсь понять, почему Rc
ведет себя по-разному, когда его передают в замыкание. Мой полный код следующий:
use std::rc::Rc;
struct Something {
value: i32
}
fn main() {
let wrapped_struct = Some(Rc::new(Something { value: 1 }));
let wrapped_integer = Some(Rc::new(1));
// Case 1: This works
let works: Option<i32> = wrapped_struct.map(|i| { i.value });
// Case 2: This fails
let fails: Option<i32> = wrapped_integer.map(|i| { i });
}
Сообщение об ошибке:
|
13 | let fails: Option<i32> = wrapped_integer.map(|i| { i });
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected i32, found struct `std::rc::Rc`
|
= note: expected type `std::option::Option<i32>`
found type `std::option::Option<std::rc::Rc<{integer}>>`
Я не понимаю, почему в первом закрытии (Случай 1) я могу использовать i
в качестве Something
(я бы ожидал Rc<Something>
), но во втором (Случай 2) я могу не использовать i
как i32
(на самом деле я получаю Rc<i32>
).
Я ценю любые ссылки на соответствующую документацию. Большое спасибо!