编译时无法知道类型为“[char]”的值的大小

The size for values of type `[char]` cannot be known at compilation time

我有以下 Rust 代码...

const BINARY_SIZE: usize = 5; 
let mut all_bits: Vec<[char; BINARY_SIZE]> = Vec::new();

let mut one_bits: [char; BINARY_SIZE] = ['0'; BINARY_SIZE];
all_bits.push(one_bits);

for i in [0..BINARY_SIZE] {
    let one = all_bits[0];
    let first_ok = one[0];  // This works, first_ok is '0'
    let first_fail = one[i]; // This works not
}

如何从变量 'one' 中获取数组中的第 i 个字符?

编译器给我 for let first_fail = one[i];错误信息 ..

错误[E0277]:[char] 类型值的大小在编译时无法得知

您的问题是您使用的范围语法不正确。通过将 0..BINARY_SIZE 括在方括号中,您将迭代 Range 切片中的元素,而不是迭代指定范围内的值。

这意味着 iRange 类型而不是 usize 类型。您可以通过在循环顶部添加 let i: usize = i; 来证明这一点。并使用范围 returns 索引一个切片,而不是数组的一个元素。

尝试像这样删除括号:

const BINARY_SIZE: usize = 5; 
let mut all_bits: Vec<[char; BINARY_SIZE]> = Vec::new();

let mut one_bits: [char; BINARY_SIZE] = ['0'; BINARY_SIZE];
all_bits.push(one_bits);

for i in 0..BINARY_SIZE {
    let one = all_bits[0];
    let first_ok = one[0];  // This works, first_ok is '0'
    let first_fail = one[i]; // This works now
}

这里的错误真的没有多大帮助。但是,如果您使用的是像 rust-analyzer 这样有用的编辑器集成,您会看到一个显示 i: Range.

的嵌体类型提示

或许可以改进这里的rust编译器错误信息,通过索引类型追溯。