У меня есть следующие структуры:
struct Age(u8);
struct User {
age: Age,
}
Я хочу привести заимствованное значение типа User
в &Age
, как в следующих примерах:
let s = String::from("abcd");
let z: &str = &s; // This works
let b = Box::new(Age(8));
let a: &Age = &b; // This also works
В документации для Borrow
упоминается, что тип A
может быть заимствован как некоторый другой тип B
, если A
реализует Borrow<B>
, поэтому я попытался реализовать Borrow<Age>
для User
:
use std::borrow::Borrow;
impl Borrow<Age> for User {
fn borrow(&self) -> &Age {
&self.age
}
}
fn main() {
let u = User { age: Age(8) };
let a: &Age = u.borrow(); // Works
let a: &Age = &u; // Error
}
Это сообщение об ошибке, которое я получаю:
error[E0308]: mismatched types
--> src/main.rs:23:19
|
23 | let a: &Age = &u; // Error: expected struct `Age`, found struct `User`
| ^^ expected struct `example::Age`, found struct `example::User`
|
= note: expected type `&example::Age`
found type `&example::User`
Я что-то упустил?Как заставить &u
в &Age
?