我寫了這個簡單的輸入解析:如何知道什麼時候借結束
use std::io;
fn main() {
let mut line = String::new();
io::stdin().read_line(&mut line)
.expect("Cannot read line.");
let parts = line.split_whitespace();
for p in parts {
println!("{}", p);
}
line.clear();
io::stdin().read_line(&mut line)
.expect("Cannot read line.");
}
上面的代碼創建了一個String
對象,讀取一行進去,用空白,並打印輸出,他分裂了。然後它嘗試使用相同的String
對象執行相同的操作。在編譯時,我得到錯誤:
--> src/main.rs:15:5
|
9 | let parts = line.split_whitespace();
| ---- immutable borrow occurs here
...
15 | line.clear();
| ^^^^ mutable borrow occurs here
...
19 | }
| - immutable borrow ends here
由於String
是owned by an iterator。該解決方案被描述爲:
let parts: Vec<String> = line.split_whitespace()
.map(|s| String::from(s))
.collect();
我有幾個問題在這裏:
- 我已經通過調用每個在它消耗的迭代器。它的借款應該已經結束。
- 如何從函數定義中知道借用的生命期?
- 如果一個函數是借用一個對象,我怎麼知道它釋放它?例如在解決方案中使用
collect()
釋放借入。
我想我在這裏錯過了一個重要的概念。
請僅發佈[每個問題一個問題](https://meta.stackexchange.com/q/39223/281829)。 – Shepmaster
這些是與相同概念相關的相關問題,因此發佈三個單獨的問題並不會富有成效。 – Xolve