编译时无法知道类型为“[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
切片中的元素,而不是迭代指定范围内的值。
这意味着 i
是 Range
类型而不是 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编译器错误信息,通过索引类型追溯。
我有以下 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
切片中的元素,而不是迭代指定范围内的值。
这意味着 i
是 Range
类型而不是 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编译器错误信息,通过索引类型追溯。