在Python中,我了解到可以通过动态索引检索元组值:
data = (1,2,3,4)
data[0]
for a in range(len(data)):
print(data[a])
输出:
1
2
3
4
如何在Rust中做到这一点?
我尝试过这样的事情:
fn main() {
let data = (12, 3, 4, 5);
for a in 0..100 {
println!("{}", data.a);
}
}
但是它不起作用,只会给我一些错误。
答案 0 :(得分:3)
正如其他人指出的那样,您可能想使用数组或console.log(req.params)
。
与the book explains一样,元组是异构数据类型:每个元组元素可以具有不同的类型。如果您可以遍历所有元组值,则可能会发生奇怪的事情:
Vec<T>
另一方面,数组是同类类型:所有元素都具有相同类型!因此,以上代码段中的问题不会发生。 let data = (12, true);
for a in 0..data.len() {
// Oops: `+ 1` makes sense for the integer, but not for the bool
println!("{}", data.a + 1);
}
也是这样:只能存储类型Vec<T>
的元素。 T
和数组之间的区别:向量可以增长,即,在编译时数组具有固定大小的情况下,其大小可以动态调整。
这是带有数组(Playground)的代码段:
Vec<T>
但是,当然,如果需要,您可以遍历数组之类的集合而无需遍历索引(例如let data = [12, 3, 4, 5];
for a in 0..data.len() {
println!("{}", data[a]);
}
)。
最后一点:当然,从技术上讲,可以通过做for elem in &data
指针魔术来创建动态元组索引–假设您只在元组中存储相同的类型。但这几乎是没有必要的,应该避免。这就是为什么我什至不显示代码该怎么做的原因。