我是Rust新手,希望瞭解像借用這樣的概念。我試圖用標準輸入創建一個簡單的二維數組。代碼:如何在Rust中迭代和提取出for循環中的值
use std::io;
fn main() {
let mut values = [["0"; 6]; 6]; // 6 * 6 array
// iterate 6 times for user input
for i in 0..6 {
let mut outputs = String::new();
io::stdin().read_line(&mut outputs).expect(
"failed to read line",
);
// read space separated list 6 numbers. Eg: 5 7 8 4 3 9
let values_itr = outputs.trim().split(' ');
let mut j = 0;
for (_, value) in values_itr.enumerate() {
values[i][j] = value;
j += 1;
}
}
}
這不會編譯,因爲outputs
變量壽命不夠長:
error[E0597]: `outputs` does not live long enough
--> src/main.rs:20:5
|
14 | let values_itr = outputs.trim().split(' ');
| ------- borrow occurs here
...
20 | }
| ^`outputs` dropped here while still borrowed
21 | }
| - borrowed value needs to live until here
如何,我可以得到迭代值從塊到值的數組的?
這將是理想的,如果我可以解決這個使用數組。但似乎沒有辦法在Rust中創建一個字符串數組。不是嗎?第一種方法適用於矢量。謝謝你的回答..(包括你對IRC的最後評論) 「value是一個&str,來自輸出的子字符串,所以.to_string()爲String分配空間並將子字符串複製到該字符串中,所以value是一個&str(a因爲它不是一個引用,所以它不受借用檢查器或「輸出」的限制。「 – vimukthi
沒有*好*的方法來創建一個字符串數組。 '[String :: new(),String :: new(),String :: new(),String :: new(),String :: new(),String :: new()],[String :: new(),String :: new(),String :: new(),String :: new(),String :: new(),String :: new()],...]'當然不好。 – bluss