如何在for-in循环中指定类型?

时间:2015-04-19 15:54:17

标签: loops rust

请参阅此简单playpen

fn main() {
    for i in 0..10 {
        println!("{}", i*0.5); 
    }
}

Rust 1.0-beta.2上的编译结果是“错误:core::ops::Mul<_>

类型未实现特征_

我认为我需要以某种方式指定i的类型,但我很难找到有关如何执行此操作的文档。

1 个答案:

答案 0 :(得分:3)

当积分变量不受其他约束时,它将回退到i32。问题是你有一个无约束的整数和浮点数,所以它不清楚如何乘以它们(因此错误)。因为无论如何你必须将它们转换为乘法,我只是在print语句中转换循环变量:

fn main() {
    for i in 0..10 {
        println!("{}", (i as f64) * 0.5); 
    }
}

我不知道是否可以实际指定循环变量的类型。在这样的情况下,我只是确定范围是明确定义的:

fn main() {
    for i in 0..10_u16 {
        println!("{}", i * 0.5); 
    }
}

然而,这仍然有相同的错误(但有更多细节):

<anon>:3:24: 3:31 error: the trait `core::ops::Mul<_>` is not implemented for the type `u16` [E0277]
<anon>:3         println!("{}", i * 0.5); 
                                ^~~~~~~

正如我前面提到的,你不能隐式地乘以整数和浮点数。你必须决定你想要的意思。