无法返回Chars迭代器,因为它“活不够久”

时间:2016-07-24 20:25:59

标签: rust

我希望能够将一个Chars迭代器分配给一个结构,其String是在结构的“构造函数”方法中创建的。我该怎么做?

代码(run it):

use std::str::Chars;

fn main() {
    let foo = Foo::new();
}

struct Foo<'a> {
    chars: Chars<'a>
}
impl<'a> Foo<'a> {
    pub fn new() -> Self {
        let s = "value".to_string();
        Foo { chars: s.chars() }
    }
}

错误:

error: `s` does not live long enough
  --> <anon>:13:22
13 |>         Foo { chars: s.chars() }
   |>                      ^
note: reference must be valid for the lifetime 'a as defined on the block at 11:25...
  --> <anon>:11:26
11 |>     pub fn new() -> Self {
   |>                          ^
note: ...but borrowed value is only valid for the block suffix following statement 0 at 12:36
  --> <anon>:12:37
12 |>         let s = "value".to_string();
   |>        

(在我的实际代码中,构造函数从文件中读取文本)

1 个答案:

答案 0 :(得分:5)

你不能。 Chars不取得字符串的所有权,因此一旦您离开Foo::new,该字符串就不再存在了。您需要存储字符串本身。 Chars实际上只是一种小型实用程序类型,意味着在网站上使用,而不是存储在以后使用的地方。