我想拥有一个在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/

10-13 02:22