我试图跟随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