let secret_num = rand::thread_rng().gen_range(1, 101);

但 在官方文档中,代码是

let secret_num = rand::thread_rng().gen_range(1..=100);

为什么它返回的是范围而不是整数.

完整代码

use std::io;
use std::cmp::Ordering;
use rand::Rng;
use colored::*;

fn main() {
    let secret_num = rand::thread_rng().gen_range(1..=100);
    println!("The secret number is {}", secret_num);

    println!("Guess the Number!");

    loop {

        println!("Please input you guess: ");

        let mut guess = String::new();


        io::stdin()
            .read_line(&mut guess)
            .expect("Failed to read line");
            
        println!("You guessed: {}", guess);

        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(_) => continue,

        };
        
        match guess.cmp(&secret_num) {
            Ordering::Less => println!("{}", "Too small!".red()),
            Ordering::Greater => println!("{}", "Too big!".red()),
            Ordering::Equal => {
                println!("{}", "You win!".green());
                break;
            },

        }
    }
}


推荐答案

当你使用some older version的时候,你看到的是documentation for rand@0.8.x. API的不同之处在于前者需要Range

fn gen_range<T, R>(&mut self, range: R) -> T
where
    T: SampleUniform,
    R: SampleRange<T>,
{
    //...
}

但您正在使用的旧版本预计会有lowhigh的界限.

fn gen_range<T: SampleUniform, B1, B2>(&mut self, low: B1, high: B2) -> T
where
    B1: SampleBorrow<T> + Sized,
    B2: SampleBorrow<T> + Sized,
{
    //...
}

在您的例子中,铁 rust 分析器或您使用的任何东西都会推断TRange,因为第一个参数lowB1: SampleBorrow<T> + Sized,类型的(可以borrow ,在这里返回对T的引用,也就是Range).如果您阅读进一步的错误,它还应该告诉您,它仍然缺少第二个参数high.

Rust相关问答推荐

在一个tauri协议处理程序中调用一个rectuc函数的推荐技术是什么?

borrow 和内部IntoIterator

抽象RUST中的可变/不可变引用

为什么这是&q;,而让&q;循环是无限循环?

我如何制作一个变异迭代器来锁定内部数据直到删除?

将serde_json读入`VEC<;T&>;`( rust 色)时出现问题

rust 蚀生命周期 不匹配-不一定超过此处定义的生命周期

失真图像图形捕获Api

找不到 .has_func 或 .get_func 的 def

如何重命名 clap_derive 中的子命令占位符?

在 Rust 中,在第一个空格上分割字符串一次

try 从标准输入获取用户名和密码并删除 \r\n

将泛型中的 Box 转换为 rust 中的 Box

在没有任何同步的情况下以非原子方式更新由宽松原子操作 Select 的值是否安全?

面临意外的未对齐指针取消引用:地址必须是 0x8 的倍数,但为 0x__错误

将多维数组转换为切片

从 Rust 中的 if/else 中的引用创建 MappedRwLockWriteGuard

错误:将自定义 proc_macro 与用Rust 的宝贝编写的属性一起使用时,无法在此范围内找到属性

为什么 i32 Box 类型可以在 Rust 中向下转换?

有没有更好的方法来为拥有 DIsplay 事物集合的 struct 实现 Display?