对于以下代码:
fn get_lines() -> String {
String::from("Hello\nWorld")
}
fn get_first_line(s: &String) -> &str {
s.lines().next().unwrap()
}
struct World<'a> {
a_str: &'a str,
}
fn work<'a>() -> World<'a> {
let s1 = get_lines();
let s2 = get_first_line(&s1);
World { a_str: s2 }
}
fn main() {
let w = work();
}
我遇到以下错误:
error[E0515]: cannot return value referencing local variable `s1`
--> src/main.rs:17:5
|
15 | let s2 = get_first_line(&s1);
| --- `s1` is borrowed here
16 |
17 | World { a_str: s2 }
| ^^^^^^^^^^^^^^^^^^^ returns a value referencing data owned by the current function
如何使用s2
构建结构实例?是World
结构的概念错误吗?
答案 0 :(得分:1)
World
指必须由其他对象拥有的str
分片。您的函数work
分配一个新的String
(通过get_lines
),并对其进行引用(通过get_first_line
)。返回时,String
会超出范围,将被丢弃,因此您无法保留对其的引用,因为它所引用的内容不再存在。
如果您要使用的World
对象不依赖于其他对象拥有的String
,则它将需要拥有数据本身:包含一个String
而不是一个{{ 1}}。