while循环可以计算出一个值吗?

时间:2015-03-01 19:27:53

标签: loops rust

我正在学习Rust,今天我偶然发现能够通过if / else表达式分配变量。例如:

let y = 5;

let x = if y > 20 { 20 } else { y };

有没有办法用while循环执行此操作?我试过了:

fn main() {
    let mut n = 0;

    let mut num = 0;

    num += while n < 10 {
        n += 1;
        5
    };
}

希望num最终等于50,while循环每次迭代递增num五次,但我得到以下错误

error[E0308]: mismatched types
 --> src/main.rs:8:9
  |
8 |         5
  |         ^ expected (), found integral variable
  |
  = note: expected type `()`
             found type `{integer}`

error[E0277]: cannot add-assign `()` to `{integer}`
 --> src/main.rs:6:9
  |
6 |     num += while n < 10 {
  |         ^^ no implementation for `{integer} += ()`
  |
  = help: the trait `std::ops::AddAssign<()>` is not implemented for `{integer}`

当然,我可以将num += 5放在while循环中,但这样可以带来乐趣。

这是我与Rust的第一天,所以我甚至不知道是否有可能做到我的想法。这确实可行吗?我在语法错误吗?

这是我正在尝试运行的代码的另一个版本,但也无法正常工作:

fn main() {
    let mut num = 0;

    num += while num < 50 {
        5
    };
}

1 个答案:

答案 0 :(得分:6)

没有。 while循环的值始终为(),即单位类型。

RFC 1624确实增强了loop循环,以便能够打破一个值:

let x = loop {
    break 42;
};
println!("{}", x);