rust - 如何在 Rust 中为 RNG 函数提供范围?
问题描述
我是编程新手,我被 Guessing Game 教程练习困住了。我正在尝试为 RNG 函数提供一个范围,但我可能做错了。我阅读了整个文档,但没有找到解决问题的方法。
这个想法很简单:
- 玩家选择难度级别
- 每个难度级别匹配一个范围
- RNG 函数在此范围内选择一个数字
这是我写的代码:
use rand::Rng;
fn main() {
println!("\nChoississez votre niveau de difficulté\n
A- Facile\n
B- Normale\n
C- Difficile\n");
let difficulte: String = read!();
let intervalle = match difficulte.as_str() {
"A" => 1..=10,
"B" => 1..=100,
"C" => 1..=1000,
_ => 1..=10000,
};
println!("\nDécouvrez un nombre entre {} et {}", intervalle.start(), intervalle.end());
let secret_number= rand::thread_rng().gen_range(intervalle.start()..intervalle.end());
println!("secret number {}", secret_number);
}
我收到该行的错误(gen.range 之后的所有内容):
let secret_number= rand::thread_rng().gen_range(intervalle.start()..intervalle.end());
这是错误:
特征界限
&{integer}: rand::distributions::uniform::SampleUniform
不满足
该特征
rand::distributions::uniform::SampleUniform
未实现&{integer}
如果我通过实际数字(例如 1 和 100)更改 intervalle.start() 和 intervalle.end() 一切正常。
我究竟做错了什么 ?
谢谢您的帮助
解决方案
问题是start
andend
方法返回引用而不是值,即 a&i32
而不是 a i32
。您可以通过取消引用返回值来解决此问题:
let secret_number = rand::thread_rng().gen_range(*intervalle.start()..*intervalle.end());
// ^ ^
*
是解引用运算符。
intervalle
但是,您可以直接传递intervalle
给,而不是构造一个范围并将其存储在只是为了使用该范围的边界来构造另一个范围gen_range
!
let secret_number = rand::thread_rng().gen_range(intervalle);
推荐阅读
- reactjs - 如何在 React+Graphql 中设置 resetToken?
- laravel - 部署者 Laravel 迁移失败
- c++ - 在 C++ 中声明方法时出现测试问题
- android - 在实现地图视图的两个片段之间共享数据的最佳方式?
- ubuntu - Github Action- 如何重启会话?
- python - 为什么打印格式会抛出 NoneType 错误?
- javascript - JavaScript:无法将 for 循环的索引与另一个数字进行比较
- ansible - Ansible - 调用救援后跳过块中的其他任务
- python - 如何解决Kivy中的“.kv多次加载”错误?
- java - 获取算法的运行时间