当前位置:  开发笔记 > 编程语言 > 正文

我可以在不将结果绑定到let/match/for语句中的新变量的情况下构造元组吗?

如何解决《我可以在不将结果绑定到let/match/for语句中的新变量的情况下构造元组吗?》经验,为你挑选了1个好方法。

我想构造一个元组并将结果的一部分分配给一个新变量,并将结果的另一部分分配给现有的.

以下代码说明了intent(这是一个导致无限循环打印的愚蠢示例[0]):

fn main() {
    let mut list = &[0, 1, 2, 3][..];
    while !list.is_empty() {
        let (head, list) = list.split_at(1);
        // An obvious workaround here is to introduce a new variable in the above
        // let statement, and then just assign it to list.
        println!("{:?}", head);
    }
}

此代码创建一个新变量,list而不是重新分配它.

如果我将代码更改为以下(为了避免let引入新list变量),它不会编译:

fn main() {
    let mut list = &[0, 1, 2, 3][..];
    while !list.is_empty() {
        let head;
        (head, list) = list.split_at(1);
        println!("{:?}", head);
    }
}

编译错误:

error[E0070]: invalid left-hand side expression
 --> src/main.rs:5:9
  |
5 |         (head, list) = list.split_at(1);
  |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ left-hand of expression not valid

有没有办法做到这一点,或者可以解构只能在使用let,matchfor语句?



1> DK...:

没有.

解构是你只能用模式做的事情; 赋值的左侧不是模式,因此您无法进行destructure-and-assign.

请参阅proto-RFC 372(解构分配),其中讨论了添加此功能的可能性.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有