string - struct str 属性必须是引用吗?
问题描述
对于以下代码:
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
结构的概念错误吗?
解决方案
World
指的是str
必须由其他东西拥有的切片。您的函数work
分配一个新的String
(通过get_lines
),并对其进行引用(通过get_first_line
)。当它返回时,String
超出范围并将被删除,因此您不能保留对它的引用,因为它所引用的东西不再存在。
如果您想要一个World
不依赖于String
其他东西拥有的对象,则它需要拥有数据本身:包含 aString
而不是 a &'a str
。
另请参阅Rust Book 中的“悬空引用”。
推荐阅读
- python-3.x - 如何用列表中的“无”替换不存在的元素[PYTHON]
- linkedin - 是否可以将 AutoFill Linkedin 集成到 elementor 表单中?
- ios - SocketRocket IOS Swift 无法重新打开它正在崩溃的套接字
- android-recyclerview - 水平 recyclerView 中的项目比垂直 recyclerView 显示不正确
- python - 给定一个句子,返回一个单词颠倒的句子
- java - 如何轻松地从 Intellij 制作 jar 文件并正确运行?
- python - 尝试使用 BeautifulSoup 写入时出现文件模式错误
- amazon-web-services - 无法连接到 Amazon EC2 实例上的自定义端口
- javascript - 从项目中删除文件时包裹捆绑器“ENOENT:没有这样的文件或目录”
- azure - ML.NET 与 Azure ML Studio