2014-11-02 81 views
0

我需要帮助了解寿命说明符。我想我得到了生命时间的概念。我看着Memory, Ownership and Lifetimes。我只是想,如果我能通过这个小小的example它可以帮助我的生活时间的语法。到目前为止,我的一个主题感到困惑。防锈寿命说明符的语法

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

有几个共同的风格琐碎点:'IMPL <'a>富<'a>','&'一个str','用户{名使用uname}'。 – 2014-11-02 22:48:09

回答

2

我不确定你确切的问题是什么,所以我想你想要编译的代码。检查这个playground

请注意,生命周期参数是类型的一部分,所以您不仅需要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); 
} 
+0

谢谢,我真的想要一个不平凡的例子来学习,并且有太多路障让我克服。我找不到很多有生之年的例子。 – Bruce 2014-11-03 00:06:13