如何在锈中的for循环内返回值?

问题描述 投票:1回答:1

我想移植此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在for循环中返回值的正确方法是什么?为什么与python相比,我的rust代码输出的输出不同?

rust rust-cargo
1个回答
1
投票

问题是线

let x = 2.0 * x;

let引入了一个新变量,原始的x未被修改。然后,下一个循环迭代将再次使用参数x乘以2.0,而不是上一个循环迭代的变量x

您需要将值分配给现有的x变量(需要将其标记为mut able):

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));
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.