Ich bin neu in Rust und suche Konzepte wie das Ausleihen zu verstehen. Ich versuche, ein einfaches zweidimensionales Array mit Standardeingabe zu erstellen. Der Code:Wie man iteriert und Werte aus einer for-Schleife in Rust extrahiert
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;
}
}
}
Dies kompiliert nicht, weil die outputs
Variable Lebensdauer nicht lang genug ist:
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
Wie kann ich die iterierten Werte aus dem Block in Werte Array bekommen?
Es wäre ideal, wenn ich das mit Arrays lösen kann. Aber anscheinend gibt es keine Möglichkeit, in Rust ein Array von Strings zu erstellen. Ist es nicht? Die erste Methode funktioniert gut mit den Vektoren. Danke für die Antwort .. (einschließlich Ihrer letzten Bemerkungen zu IRC) "value ist a & str, ein Teilstring von outputs. So .to_string() reserviert Platz für einen String und kopiert den Teilstring in diesen. So Wert war ein & str (a Referenz) aber in einen String umgewandelt wird, da es keine Referenz ist, wird es nicht durch den Border Checker oder die Lebensdauer von 'Outputs 'eingeschränkt." – vimukthi
Es gibt keine * nette * Möglichkeit, ein Array von Strings zu erstellen. '[[String :: new(), String :: new(), String :: new(), String :: new(), String :: new(), String :: new()], [String :: new(), String :: new(), String :: new(), String :: new(), String :: new(), String :: new()], ...] ist sicherlich nicht nett . – bluss