我試圖跟隨guide,而且我編譯如下代碼:爲什麼random()結果不具有推斷的類型?
use std::rand;
fn main() {
println!("Guess the number!");
let secret_number = (rand::random() % 100i) + 1i;
println!("The secret number is: {}", secret_number);
}
不過,我得到以下錯誤:
➜ guess git:(master) ✗ cargo run
Compiling guess v0.0.1 (file:///home/mkpankov/rust/guide/guess)
/home/mkpankov/rust/guide/guess/src/main.rs:6:26: 6:40 error: the type of this value must be known in this context
/home/mkpankov/rust/guide/guess/src/main.rs:6 let secret_number = (rand::random() % 100i) + 1i;
^~~~~~~~~~~~~~
error: aborting due to previous error
Could not compile `guess`.
To learn more, run the command again with --verbose.
我看着%
定義,原來它使用Rem
trait。特質僅在相同類型的操作數上定義操作符。
現在,我使用100i
作爲第二操作數,根據reference應該是int
。
那麼,爲什麼編譯器無法根據random()
推斷出正確的類型,正如手冊所示? (和我的Haskell經驗暗示它應該)。
不完全確定這是一個錯誤,因此是一個問題。
一些額外的信息:在Ubuntu 14.04 64
➜ guess git:(master) ✗ rustc --version
rustc 0.12.0-nightly (63fe80e1f 2014-10-08 23:42:39 +0000)
上運行。
更新:我注意到這個錯誤是打算髮生的(該指南告訴稍後修復它的方法)。然而,爲什麼編譯器不能推斷該類型的原始問題仍然適用。
這非常有趣...請注意,如果您交換參數的順序(即'100i%rand :: random()'),它會正確推斷類型。我對這種行爲也很好奇 – aochagavia 2014-10-10 13:55:51