我是生锈的新手。我正在尝试了解模块化系统如何在生锈中工作,并且我尝试在文件的第一行导入
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 中工作,我尝试在文件的第一行导入 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
你希望这能奏效吗?不?这就是你的答案。