types - 如何将元组解构为类型变量?

标签 types rust tuples pattern-matching

我正在尝试将元组分解为变量,然后由于错误地提及其中一种类型而导致错误:

fn main() {
    let tup = (500, 6.4, 1);
    let (x: bool, y: f32, z: i16) = tup;
    println!("{}, {}, {}", x, y, z);
}

我的想法是,编译器会引发错误,因为 x 被指定为 bool 但正在与 500 匹配。令人惊讶的是,这是编译器提示的最后一条语句,说在此范围内找不到 x、y 和 z:

我尝试了另一种方式:

fn main() {
    let tup = (500, 6.4, 1);
    let mut x: bool = true;
    let mut y: f32 = true;
    let mut z: i16 = true;
    (x, y, z) = tup;
    println!("{}, {}, {}", x, y, z);
}

这一次,编译器确实引发了预期的错误,但它也指出 (x, y, z) = tup; 的左侧无效。有人可以解释发生了什么吗?

最佳答案

在做元组赋值时,你应该首先指定你所有的变量,然后是所有的类型:

let (x, y, z): (bool, f32, i16) = tup;

给出您预期的错误 ( playground )

关于types - 如何将元组解构为类型变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47667195/

相关文章:

haskell - Haskell中不同类型的乘法

rust - 如何运行库测试和文档测试而不是集成测试

python - 如何在 Python 中将元组转换为字符串?

Python 函数参数 : tuple/list

java - Java 中可以声明多类型变量吗?

javascript - 什么时候在闭包中使用 typedef?

Java - 对象中的ArrayList

rust - 如何从闭包中取回移动值的所有权?

Rust,libzmq,客户端仅发送消息,然后接收

c++ - 如何将元组的值转发给成员初始化程序?