2014-11-27 2 views
1

Так что я пытаюсь получить случайное число, но я бы предпочел, чтобы он не возвращался в качестве uint вместо int ... Не уверен, что это совпадение тоже, но компилятор не так далеко потому что он никогда не слышал об этой from_uint, что я пытаюсь сделать:Как преобразовать целое число без знака в целое число в Rust?

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, 
     } 
} 

ответ

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) 
} 
+0

Мне нравится ваш ответ, и он работает, но я надеюсь, что кто-то придет, чтобы объяснить, почему from_thing() функции, кажется, не будет работать так, как я думал, что они это сделают. –

+0

есть что-то, что возвращает параметр , чтобы вы могли справиться с переполнением? –

+0

'from_uint' удален из' std :: num' – KindDragon

Смежные вопросы