Wie kann ich die initialisieren das array von arrays in einem struct?
Ich versuche zu lernen rust aus dem tutorial. Ich dachte Conway ' s Spiel des Lebens wäre ein guter Ort, um zu starten.
Ich habe Schwierigkeiten zu verstehen, wie diese zu schreiben Grid::new() fn.
Hier ist, was ich habe, so weit:
enum Cell {
alive, dead
}
impl Cell {
fn new() -> Cell {
alive
}
struct Grid {
priv inner: [ [Cell, .. GRID_SIZE], .. GRID_SIZE],
}
impl Grid {
fn new() {
Grid { inner: ???? }
}
}
...
fn main () {
let grid = Grid::new(); //Stack allocated grid (internal stack allocad array)
}
Was ich will, ist für das grid initialisiert werden, mit Zellen, die alle den Wert 'lebendig'.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Grid::new
initialisierenGrid::inner
mit einer verschachtelten fixed-size array-literal, was geschrieben steht, genau wie der Typ, aber mit dem Wert, den Sie möchten, initialisieren Sie das array mit Platz in derCell
Typ:(Sie können
Cell::new()
stattalive
wenn Sie lieber verwenden Sie die Konstruktor-Funktion.)Den
inner
Mitglied kann dann in Ausdrücken verwendet werden, wie folgt (beachten Sie, dasspriv
nur steuert die Sichtbarkeit von code außerhalb des aktuellen Moduls):In Rust, verschachtelte arrays, wie in diesem Beispiel, sind ein spezieller Fall von festen Größe von arrays.
Um zu sehen, wie dies funktioniert, finden Sie in der tutorial-Sektion auf Vektoren und Strings. Insbesondere, im Gegensatz zu Vektoren (Typ
~[T]
), die dynamisch auf dem heap zugeordnet und ändern Ihre Länge (wenn Sie sind veränderlich), fixed-size-arrays Ihre Länge, eingebettet in der Art ([T, ..LENGTH]
), so dass Sie nicht ändern können, der Größe nach, die erstellt wird.T
selbst muss entweder eine Feste Größe-Typ oder ein Zeiger ist. Im Gegenzug jedoch, fixed-size-arrays sind value-Typen, die direkt auf dem Stapel reserviert, eingebettet instruct
Definitionen (wieGrid
), etc.Da ein array fester Größe ist, selbst eine Feste Größe geben, die eine verschachtelte array fester Größe ist nur ein spezieller Fall, wo ein fixed-size array der element-Typ eines Arrays fester Größe. Insbesondere der Speicher durch
Grid::inner
ist genauGRID_SIZE * GRID_SIZE * sizeof(Cell)
(wenn wir ignorieren, Ausrichtung). Auch nützlich ist ein Vektor der fixed-size-arrays~[T, ..LENGTH]
, wenn Sie wissen, dass die Anzahl der Spalten in einer matrix, nicht aber die Anzahl der Zeilen.Beiden Vektoren und fixed-size-arrays als Funktions-argument, wenn das argument eine Scheibe (Typ
&[T]
).Einige details ändern kann zwischen jetzt und dem release von Rust 1.0. Wenn du neugierig bist, Suche die Rost subreddit für "dynamisch sized types" soll sich die vorgeschlagenen änderungen und die Argumentation hinter Ihnen, oder Sie können stets verlangen, um auf Reddit oder die #rust im IRC-Kanal.