我希望能够将一个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();
|>
(在我的实际代码中,构造函数从文件中读取文本)
答案 0 :(得分:5)
你不能。 Chars
不取得字符串的所有权,因此一旦您离开Foo::new
,该字符串就不再存在了。您需要存储字符串本身。 Chars
实际上只是一种小型实用程序类型,意味着在网站上使用,而不是存储在以后使用的地方。