编者注:这个问题是在 Rust 1.0 之前提出的,并且问题中的一些断言在 Rust 1.0 中不一定正确。一些答案已更新以解决这两个版本。
我想创建一个向量,但我只知道我希望向量在运行时的大小。这就是我现在的做法(即创建一个空的、可变的向量,并向其中添加向量):
fn add_pairs(pairs: ~[int]) -> ~[int] {
let mut result : ~[int] = ~[];
let mut i = 0;
while i < pairs.len() {
result += ~[pairs[i] + pairs[i + 1]];
i += 2;
}
return result;
}
这就是我想做的事情(即,创建一个向量并将所有内容放入其中,而不是将大量向量添加在一起):
fn add_pairs(pairs: ~[int]) -> ~[int] {
let number_of_pairs = pairs.len() / 2;
let result : ~[int, ..number_of_pairs];
let mut i = 0;
while i < pairs.len() {
result[i] = pairs[2 * i] + pairs[2 * i + 1];
i += 1;
}
return result;
}
不幸的是,执行上述操作给了我类似的东西:
error: expected constant expr for vector length: Non-constant path in constant expr
let result: ~[int, ..number_of_pairs];
^~~~~~~~~~~~~~~~~~~~~~~~
我得到的印象是向量必须在编译时知道它们的大小(因此您需要将它们的大小设置为常数)。来自Java背景,我很困惑!有没有办法创建一个只有在运行时才知道大小的向量?
我正在使用 Rust 0.6。