2 个版本
使用旧的 Rust 2015
0.1.1 | 2019 年 8 月 26 日 |
---|---|
0.1.0 | 2019 年 8 月 26 日 |
#2225 在 算法
533 每月下载量
在 8 个 crate 中使用 (via random-fast-rng)
15KB
265 行
random-trait
一个 Rust 库 random-trait,它可以帮助以简单便捷的方式生成随机值,同时仍然是一个非常轻量级的库,没有依赖。
这个 crate 是受 rand crate 启发的,但目的是提供一个非常轻量级的库,并支持旧编译器。
用法
将此添加到您的 Cargo.toml
[dependencies]
random-trait = "0.1"
并且对于 Rust 版本 2015,将此添加到您的 crate 根目录
extern crate random_trait;
use random_trait::{GenerateRand, Random};
在 Rust 版本 2018 中,您可以直接这样做
use random_trait::{GenerateRand, Random};
之后,您需要为您随机数源实现 Random
并可选地为您的自定义类型添加 GenerateRand
实现。
示例
use random_trait::{Random, GenerateRand};
#[derive(Default)]
struct MyRandomGenerator {
ctr: usize,
}
impl Random for MyRandomGenerator {
type Error = ();
fn try_fill_bytes(&mut self, buf: &mut [u8]) -> Result<(), Self::Error> {
for e in buf.iter_mut() {
*e = self.ctr as u8;
self.ctr += 1;
}
Ok(())
}
}
struct MyStuff {
a: u64,
b: char,
}
impl GenerateRand for MyStuff {
fn generate<R: Random + ?Sized>(rand: &mut R) -> Self {
MyStuff {a: rand.gen(), b: rand.gen() }
}
}
fn get_random_stuff() -> MyStuff {
let mut rand = MyRandomGenerator::default();
rand.gen()
}
fn get_random_u128() -> u128 {
let mut rand = MyRandomGenerator::default();
rand.gen()
}