Синтаксис Rust-указателя времени жизни
Мне нужна помощь в понимании спецификаторов жизни. Я думаю, что я понимаю концепцию жизни. Я смотрел Память, Собственность и Время жизни. Я просто думаю, что если бы я мог работать с этим небольшим примером, он мог бы помочь мне с синтаксисом воплощений. Тема, которую я на сегодняшний день нахожу запутанной.
use std::collections::HashMap;
fn main() {
pub struct User<'a> {
pub name: & 'a str
}
impl <'a>User<'a> {
pub fn new(uname: & 'a str, pwd: & 'a str) -> User {
User{name: uname}
}
}
pub struct ChatRoom<'a> {
pub name: & 'a str,
pub users: HashMap<& 'a str, User>
}
impl <'a>ChatRoom<'a> {
pub fn new(name: &str) -> ChatRoom {
let users = HashMap::new();
ChatRoom {name: name, users: users}
}
pub fn join(&mut self, user: User) {
self.users.insert(user.name, user);
}
}
let mut room = ChatRoom::new("Test");
let user = User::new("bender","123");
room.join(user);
}
1 ответ
Решение
Я не уверен, каков ваш точный вопрос, поэтому я думаю, что вы хотели, чтобы этот код компилировался. Проверьте эту игровую площадку.
Обратите внимание, что параметры времени жизни являются частью типа, поэтому вы хотите User<'a>
не просто User
,
use std::collections::HashMap;
fn main() {
struct User<'a> {
name: &'a str,
}
impl<'a> User<'a> {
fn new(uname: &'a str, pwd: &'a str) -> User<'a> {
User { name: uname }
}
}
struct ChatRoom<'a> {
name: &'a str,
users: HashMap<&'a str, User<'a>>,
}
impl<'a> ChatRoom<'a> {
fn new(name: &str) -> ChatRoom {
let users = HashMap::new();
ChatRoom {
name: name,
users: users,
}
}
fn join(&mut self, user: User<'a>) {
self.users.insert(user.name, user);
}
}
let mut room = ChatRoom::new("Test");
let user = User::new("bender", "123");
room.join(user);
}