我希望能够将一个Chars
迭代器分配给一个结构,String
该结构是在struct的"constructor"方法中创建的.我该怎么做呢?
代码(运行它):
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
--> :13:22
13 |> Foo { chars: s.chars() }
|> ^
note: reference must be valid for the lifetime 'a as defined on the block at 11:25...
--> :11:26
11 |> pub fn new() -> Self {
|> ^
note: ...but borrowed value is only valid for the block suffix following statement 0 at 12:36
--> :12:37
12 |> let s = "value".to_string();
|>
(在我的实际代码中,构造函数从文件中读取文本)
你不能.Chars
不取得字符串的所有权,所以一旦你离开Foo::new
,字符串就不再存在了.您需要存储字符串本身.Chars
实际上只是一个小的实用程序类型,它意味着在现场使用,而不是存储在以后使用的某个地方.