【问题标题】:Syntax of Rust lifetime specifierRust 生命周期说明符的语法
【发布时间】:2014-12-29 13:55:21
【问题描述】:

我需要帮助来理解生命周期说明符。我想我明白了生命的概念。我看了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);
}

【问题讨论】:

  • 一些琐碎的常见风格:impl&lt;'a&gt; Foo&lt;'a&gt;&amp;'a strUser { name: uname }

标签: rust lifetime


【解决方案1】:

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

请注意,生命周期参数是类型的一部分,因此您需要 User&lt;'a&gt; 而不仅仅是 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);
}

【讨论】:

  • 谢谢,我真的想要一个不平凡的例子来学习,有太多的障碍让我克服。我找不到很多生活中的例子。
猜你喜欢
  • 1970-01-01
  • 2022-07-16
  • 1970-01-01
  • 2013-07-03
  • 2016-02-18
  • 1970-01-01
  • 2015-08-24
  • 2017-09-05
  • 2011-07-29
相关资源
最近更新 更多