In rustc 1.0.0 möchte ich eine Funktion schreiben, die ein zweidimensionales Array mutiert, das vom Aufrufer bereitgestellt wird. Ich hatte gehofft, dies funktionieren würde:Veränderliches mehrdimensionales Array als Funktionsargument
fn foo(x: &mut [[u8]]) {
x[0][0] = 42;
}
fn main() {
let mut x: [[u8; 3]; 3] = [[0; 3]; 3];
foo(&mut x);
}
Es schlägt fehl, zu kompilieren:
$ rustc fail2d.rs
fail2d.rs:7:9: 7:15 error: mismatched types:
expected `&mut [[u8]]`,
found `&mut [[u8; 3]; 3]`
(expected slice,
found array of 3 elements) [E0308]
fail2d.rs:7 foo(&mut x);
^~~~~~
error: aborting due to previous error
Ich glaube, das sagt mir, ich brauche irgendwie ein Stück Scheiben um die Funktion zu füttern, aber ich weiß nicht, wie konstruiere ich das?
Es "funktioniert", wenn ich die Länge des geschachtelten Arrays in der Funktionssignatur fest codiere. Dies ist nicht akzeptabel, weil die Funktion auf mehrdimensionalen Arrays beliebiger Dimension arbeiten soll:
fn foo(x: &mut [[u8; 3]]) { // FIXME: don't want to hard code length of nested array
x[0][0] = 42;
}
fn main() {
let mut x: [[u8; 3]; 3] = [[0; 3]; 3];
foo(&mut x);
}
tldr; irgendwelche kostenlosen Möglichkeiten, einen Verweis auf ein mehrdimensionales Array zu übergeben, so dass die Funktion Anweisungen wie $ x [1] [2] = 3; $?
Sie könnten in https://github.com/rust-lang/rfcs/issues/1038 und die entsprechende PR über generische Wert Parameter interessiert sein –