mot*_*son 6 rust borrow-checker
我正在尝试使用Select条板箱抓取网页:
let document = Document::from_read(response).unwrap();
for node in document.find(Class("lia-list-row")) {
let title = node.find(Class("page-link")).next().unwrap();
let title_text = title.text().trim();
println!("{}\n", title_text);
}
Run Code Online (Sandbox Code Playgroud)
导致以下错误:
let document = Document::from_read(response).unwrap();
for node in document.find(Class("lia-list-row")) {
let title = node.find(Class("page-link")).next().unwrap();
let title_text = title.text().trim();
println!("{}\n", title_text);
}
Run Code Online (Sandbox Code Playgroud)
我通过将.text()和分开来解决了.trim()
let title_text = title.text();
let trim_text = title_text.trim();
Run Code Online (Sandbox Code Playgroud)
有什么不同?为什么第一次尝试失败?
这一次似乎令人费解在第一,但请记住,String并且&str是不同的东西。
String可以独立生存和使用,但&str仅引用的一部分String。所以,&str可以活到参考String寿命。让我们看看它应该如何在返回签名上工作。
let title_text = title .text() .trim();
// ^ ^ ^
// Node String <- &str
Run Code Online (Sandbox Code Playgroud)
这title是一个select::Node。
Node::text返回String,但没有将其绑定到上下文。
String::trim,然后返回a &str,它是对String自身一部分的引用。
最后,借位检查器只是不了解它应该如何处理String对该引用的引用,因此在上下文中不会存在足够长的时间,因为它是一个临时值(非绑定)。
| 归档时间: |
|
| 查看次数: |
2205 次 |
| 最近记录: |