Rust 未使用的导入:`rand::Rng` 并且没有为结构 `ThreadRng` 找到名为 `gen_range` 的方法

问题描述 投票:0回答:1

我是生锈的新手。我正在尝试了解模块化系统如何在生锈中工作,并且我尝试在文件的第一行导入

rand
io
,就像我在nodejs或python中一样。但是当我尝试在顶部导入
rand
io
时,我得到的错误是:
unused import: rand::Rng
no method named gen_range found for struct ThreadRng
错误。

帮助

谁能解释一下,我怎样才能像上面的错误代码一样使用 use 关键字,问题到底是什么?

猜对了

因为我有 JS 和 python 方面的经验,所以我猜它与变量的作用域有关。但是范围界定的性质是完全不同的。所以任何人都可以向我解释错误的原因是什么。

这里有两个代码。

越野车代码:


use rand::Rng;
use std::io;

pub mod guess_game{
    
    pub fn start(){
        
        let random_generated_number = rand::thread_rng().gen_range(1, 10);  
        // Error was here      ---------        ^ no method named `gen_range` found for struct `ThreadRng` in the current scope
items from traits can only be used if the trait is in scope

        let mut user_input = String::new();
        
        println!("Enter a number: ");
    
        io::stdin()
//      ^ a builtin type with a similar name exists: `i8`rustc E0433
            .read_line(&mut user_input)
            .expect("Error ayo hai ta");
    
        let user_input_number:i32 = user_input.trim().parse().expect("Invalid integer provided");
    
        println!("I see you entered {}", user_input);
    
        if user_input_number == random_generated_number {
            println!("RIGHT, You guessed it, {}", random_generated_number);
        }else{
            println!("WRONG!, You will have to guess {}", random_generated_number);
        };
    }
}

工作代码

pub mod guess_game{

    use rand::Rng;
    use std::io;

    pub fn start(){
        
        let random_generated_number = rand::thread_rng().gen_range(1, 10);  
    
        let mut user_input = String::new();
        
        println!("Enter a number: ");
    
        io::stdin()
            .read_line(&mut user_input)
            .expect("Error ayo hai ta");
    
        let user_input_number:i32 = user_input.trim().parse().expect("Invalid integer provided");
    
        println!("I see you entered {}", user_input);
    
        if user_input_number == random_generated_number {
            println!("RIGHT, You guessed it, {}", random_generated_number);
        }else{
            println!("WRONG!, You will have to guess {}", random_generated_number);
        };
    }
}

rust thrust
1个回答
1
投票

我是生锈的新手。我正在尝试学习模块化系统如何在 rust 中工作,我尝试在文件的第一行导入 rand 和 io 就像我在 nodejs 或 python 中那样 [...] 谁能解释我,我该如何使用上面的关键字就像在错误代码中一样,问题到底是什么?

模块没有词汇可见性。

虽然 Rust 允许您在不创建新文件的情况下创建嵌套模块语义不会改变。也就是说,通过设计

mod foo {
    // content here
}

mod foo;
// foo.rs
// content here

有意地具有完全相同的行为:它使实现更简单,并允许您通过将内容从嵌套模块移动到外部文件来分解文件,仅此而已。

这意味着就像在 Python 中一样,要让一个模块看到另一个模块的内容,您需要某种跨模块导入。

所以你原来的代码是完全一样的:

// mod.rs 

use rand::Rng;
use std::io;

pub mod guess_game
// guess_game.rs
pub fn start(){
    ...
}

在 Python 中翻译为:

# __init__.py
import random
import io

from . import guess_game
# guess_game.py
def start():
    # uses random and io

你希望这能奏效吗?不?这就是你的答案。

© www.soinside.com 2019 - 2024. All rights reserved.