6

次のようにインポートする必要があることがわかります。

use std::io::IoResult;
use std::num::{Int, ToPrimitive};
use std::rand::{OsRng, Rng};

次に、OsRng の新しいインスタンスを作成し、そこから新しい u32 int を生成しようとします。

fn main() {

  let mut rng = OsRng::new();

  let num:u32 = rng.next_u32();
  println!("{}",num);
}

ただし、エラー タイプcore::result::Result<std::rand::os::imp::OsRng, std::io::IoError>がスコープ内のメソッドを実装していないというエラーが表示されますnext_u32

しかし、さびのドキュメントには、機能があると明確に書かれていますnext_u32か? http://doc.rust-lang.org/std/rand/struct.OsRng.html

私は何が欠けていますか?

4

3 に答える 3

4

ここでの問題は、インスタンスをOsRng::new()返さないことですが、 . プログラムが OS 乱数ジェネレーターのフェッチに失敗する可能性があるためです。OsRngIoResult<OsRng>

使用例は次のとおりです。

use std::rand::{OsRng, Rng};

fn main() {

    let mut rng = match OsRng::new() {
        Ok(g) => g,
        Err(e) => panic!("Failed to obtain OS RNG: {}", e)
    };

    let num:u32 = rng.next_u32();
    println!("{}",num);
}
于 2014-12-08T17:17:54.213 に答える
1

Rust で安全な乱数を生成するための検索では、この SO の質問が返されましたが、現在の回答の状態に関するコメントとして、Rust には標準ライブラリに乱数生成が含まれなくなりました。更新された例を次に示します (2017 年 1 月現在)。

貨物.toml

[dependencies]
rand = "0.3.0"

main.rs

extern crate rand;
use rand::{OsRng, Rng};

fn main() {
    let mut rng = OsRng::new().expect("Error opening random number generator");
    println!("Random: {}", rng.next_u32());
}

参考資料: https://doc.rust-lang.org/rand/rand/index.html#cryptographic-security


それ以外の場合、元の回答のコードを使用すると、次のエラーが発生します。

error[E0432]: unresolved import `std::rand::Rng`
 --> src/main.rs:5:24
  |
5 | use std::rand::{OsRng, Rng};
  |                        ^^^ no `Rng` in `std::rand`

error: module `rand` is private
 --> src/main.rs:5:17
  |
5 | use std::rand::{OsRng, Rng};
  |                 ^^^^^

error: module `rand` is private
 --> src/main.rs:5:24
  |
5 | use std::rand::{OsRng, Rng};
  |                        ^^^

error: aborting due to 3 previous errors
于 2017-01-13T01:00:07.203 に答える