2014-06-28 75 views
11

C++例如:是否可以在Rust for循環中聲明變量的類型?

for (long i = 0; i < 101; i++) { 
    //... 
} 

鐵鏽我想:

for i: i64 in 1..100 { 
    // ... 
} 

我可以很容易地之前的聲明let i: i64 = VAR for循環 但我寧願學習正確的方式做這導致了

error: expected one of `@` or `in`, found `:` 
--> src/main.rs:2:10 
    | 
2 |  for i: i64 in 1..100 { 
    |  ^expected one of `@` or `in` here 

回答

13

您可以使用integer suffix在您使用的範圍內的文字之一。類型推斷將做休息:

for i in 1i64..101 { 
    println!("{}", i); 
} 
+2

走下去類型歸屬方法,'範圍({令x:I64 = 1; X},100)'也將工作。當然,我不建議你真的*做*那。 –

+0

這可以用於自定義類型嗎?那麼元組中的元素呢? – shakram02

+0

數字文字的後綴被嵌入到語言中。我不知道你在「元組」中的意思。當然,'(1u64,2f32)'工作得很好。也許最好問一個新問題? – BurntSushi5

3

不,這是不可能聲明變量的類型在for循環。相反,更一般的方法(例如也適用於enumerate())是通過在循環體內解構該項來引入一個let綁定。

實施例:

for e in bytes.iter().enumerate() { 
    let (i, &item): (usize, &u8) = e; // here 
    if item == b' ' { 
     return i; 
    } 
}