所以我试图获得一个随机数,但我宁愿不让它作为uint而不是int ...不确定这个匹配是否正确,但是编译器没有得到因为我从来没有听说过这件事我想做的事情:
fn get_random(max: &int) -> int {
// Here we use * to dereference max
// ...that is, we access the value at
// the pointer location rather than
// trying to do math using the actual
// pointer itself
match int::from_uint(rand::random::<uint>() % *max + 1) {
Some(n) => n,
None => 0,
}
}
答案 0 :(得分:1)
from_uint
不在std::int
的命名空间中,而是std::num
:http://doc.rust-lang.org/std/num/fn.from_uint.html
原始答案:
使用u32
将int
投放到as
。如果您将uint
或u64
投射到int
,则可能会溢出到底片中(假设您使用的是64位)。来自文档:
uint的大小等于所讨论的特定体系结构上指针的大小。
这有效:
use std::rand;
fn main() {
let max = 42i;
println!("{}" , get_random(&max));
}
fn get_random(max: &int) -> int {
(rand::random::<u32>() as int) % (*max + 1)
}