我正在编写一个从stdin读取向量的函数,这是我到目前为止所做的:
fn read_vector() -> (i64, i64, i64) {
let mut vec = (0, 0, 0);
let mut value = String::new();
for i in 0..3 {
io::stdin().read_line(&mut value).expect("Failed to read line");
vec.i = value.trim().parse().expect("Failed to read number!"); // error!
}
}
但是,带注释的行包含错误:
error: no field `i` on type `({integer}, {integer}, {integer})`
--> src/main.rs:13:13
|
13 | vec.i = value.trim().parse().expect("Failed to read number!");
| ^
阅读文档entry并未显示任何get
或类似功能。
那么,有没有办法获得元组的i
值?
答案 0 :(得分:9)
该语言没有内置方式,因为异构类型的变量索引(例如tuple
)使编译器无法不可能推断表达式的类型。
你可以使用一个宏来展开一个带有变量索引的for
循环的元组,如果它真的是,真的是必需的。
如果您打算使用需要变量索引的同构元组,为什么不使用固定长度的数组?
答案 1 :(得分:5)
那么,有没有办法得到vec的第i个值?
不,没有。由于元组可以包含不同类型的元素,因此像这样的表达式通常不具有静态已知类型。
您可以考虑使用数组而不是元组。
答案 2 :(得分:2)
虽然没有内置方法可以为非常量 i 提取 i -th值,但是存在tuple
之类的包来实现{ 同类元组的{3}}。
extern crate tuple;
...
*vec.get_mut(i).unwrap() = value.trim().parse().expect("!");
(但是,正如dynamic indexing提到的那样,对数组[i64; 3]
而不是元组(i64, i64, i64)
进行操作要好得多。)