代码之家  ›  专栏  ›  技术社区  ›  Tampa

生锈中的递归问题[副本]

  •  -2
  • Tampa  · 技术社区  · 6 年前

    我有以下类型的递归并按预期工作:

    fn test2(i: isize) -> (isize) {
        println!("i={}", i);
        return (i + 1);
    }
    
    fn main() {
        let mut i = 1;
        let mut j = 1;
        for t in 0..4 {
            (i) = test2(i);
        }
    }
    
    i=1
    i=2
    i=3
    i=4
    

    我的问题是,我真正想要的是这个递归,有像这样的多个反馈……

    fn test(i: isize, j: isize) -> (isize, isize) {
        println!("i={} j={}", i, j);
        return (i + 1, j + 1);
    }
    
    fn main() {
        for t in 0..4 {
            let (i, j) = test(i, j);
            println!("ii {} jj {}", i, j);
        }
    }
    

    当我运行代码时,我得到以下信息:

    i=1 j=1
    ii 2 jj 2
    i=1 j=1
    ii 2 jj 2
    i=1 j=1
    ii 2 jj 2
    i=1 j=1
    ii 2 jj 2
    

    如果我不使用let,我会得到以下错误:

    for t in 0 .. 4 {
        (i,j) = test(i, j);
        println!("ii {} jj {}", i,j)  ; 
    }
    
            error[E0070]: invalid left-hand side expression                                                                                                                                                          
       --> src/main.rs:265:13                                                                                                                                                                                
        |                                                                                                                                                                                                    
    265 |             (i,j) = test(i, j);                                                                                                                                                                    
        |             ^^^^^^^^^^^^^^^^^^ left-hand of expression not valid                
    

    我该如何解决?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Shepmaster Tim Diekmann    6 年前

    此功能目前在Rust中不可用。有一个 open issue 与之相关的问题追踪器。现在,你必须用手来摧毁。

    let (i1, j1) = test(i, j);
    i = i1;
    j = j1;