Der Compiler denkt, dass Sie ein usize
zu notes[x]
zuweisen, weil x
als usize
geschlossen wird, wie es notes
für die Indizierung verwendet wird, und es ist ein Teil der rechte Seite Ausdruck. Wenn er x
nicht enthält, wird der Rückgabetyp des Ausdrucks als i32
gefolgert, da er a
enthält, der keinen expliziten Typ hat und der Standardintegraltyp i32
ist.
Damit der Ausdruck der rechten Seite f64
zurückgibt, müssen Sie angeben, dass die Komponenten f64
sind und ein paar Umwandlungen durchführen. Sie werden auch ^
zu powf
ändern müssen (vorausgesetzt, Sie eine Leistung ausgeführt werden soll):
let a = 440f64;
notes[x] = (a/32.0) * 2f64.powf((x as f64 - 9.0)/12.0);
Das ist nicht genug, aber:
error[E0381]: use of possibly uninitialized variable: `notes`
--> <anon>:5:9
|
5 | notes[x] = (a/32.0) * 2f64.powf((x as f64 - 9.0)/12.0);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ use of possibly uninitialized `notes`
Um dieses Problem zu lösen, müssen Sie initialisieren das notes
Array, z mit Nullen:
let mut notes: [f64;127] = [0f64;127];
Ich nehme an '^' meinte 'pow'. – ildjarn
Ah ja, das habe ich verpasst; Ich werde das einbeziehen. – ljedrz
Vielen Dank für die Hilfe. Rust ist immer noch sehr neu für mich, ein bisschen schwer von Java-Hintergründen zu wechseln. – VikingPingvin