如何在 Rust 中 return for 循环内的值?

How to return a value inside for loop in rust?

我想移植这个 python 代码

#!/usr/bin/python
# -*- coding: utf-8 -*-

def testing(x, y):
    for i in range(y):
        x = 2.0 * x
        if x > 3.5:
            return i
    return 999


for i in range(20):
    print testing(float(i) / 10, 15)

及其输出

999
5
4
3
3
2
2
2
etc.

去锈代码。这是我写的 rust 代码,与上面 python 代码相同。

fn testing(x: f32, y: i32) -> i32 {
    for i in 0..y {
        let x = 2.0 * x;
        if x > 3.5 {
            return i;
        }
    }
    return 999;
}

fn main() {
    for i in 0..20 {
        let a = i as f32;
        println!("{}", testing(a / 10.0, 15));
    }
}

但是它的输出和python代码的输出不一样

999
999
999
999
999
999
999
etc.

使用 rust return for 循环中的值的正确方法是什么?为什么我的 Rust 代码输出与 pythons 不同的输出?

问题是线路

let x = 2.0 * x;

let引入了一个新的变量,原来的x没有修改。 下一个循环迭代将再次用参数 x 乘以 2.0,而不是上一个循环迭代中的变量 x

您需要将值赋给现有的 x 变量(这需要将其标记为 mutable):

fn testing(mut x: f32, y: i32) -> i32 {
    for i in 0..y {
        x = 2.0 * x;
        if x > 3.5 {
            return i;
        }
    }
    return 999;
}

fn main() {
    for i in 0..20 {
        let a = i as f32;
        println!("{}", testing(a / 10.0, 15));
    }
}