我想拥有一个在f64
行中计算的127 notes[x]
值的数组:
let mut notes: [f64; 127];
let a = 440;
for x in 0..127 {
notes[x] = (a / 32) * (2 ^ ((x - 9) / 12));
}
这是错误:
error[E0308]: mismatched types
--> src/main.rs:5:20
|
5 | notes[x] = (a / 32) * (2 ^ ((x - 9) / 12));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected f64, found usize
最佳答案
编译器认为您正在将usize
分配给notes[x]
,因为x
被推断为usize
,因为它用于索引notes
,并且它是右侧表达式的一部分。如果不包含x
,则表达式的返回类型将被推断为i32
,因为它包含的a
没有显式类型,默认整数类型为i32
。
为了使右边的表达式返回f64
,您需要指出它的组成部分是f64
并执行一些强制转换。您还需要将^
更改为 powf
(假设您要执行功能):
let a = 440f64;
notes[x] = (a / 32.0) * 2f64.powf((x as f64 - 9.0) / 12.0);
但是,这还不够:
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`
为了解决此问题,您需要初始化
notes
数组,例如零:let mut notes: [f64;127] = [0f64;127];
关于arrays - 在Rust中为数组分配值会导致: 'expected f64, found usize' 错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44482473/