2014-11-02 27 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