使用lazy_static
库创建一个单例。我无法在另一个文件的模块中访问该单例。如果模块在主要功能下定义,则可以正常访问。
给出如下主文件,test_stuff
可以很好地访问游戏数据:
extern crate gamedata;
#[macro_use]
extern crate lazy_static;
lazy_static! {
pub static ref GAMEDATA: &'static str = "I am a test STrings";
}
fn main() {
println!("Game Data:{}",*GAMEDATA);
let obj = gamedata::readinginstatic::readinginstatic {
structure:"working".to_string()
};
obj.print_static();
}
mod test_stuff {
use ::GAMEDATA;
fn printthing() {
println!("herenow:{}", *GAMEDATA);
}
}
带有lib.rs
文件,例如:
pub mod readinginstatic;
以及另一个文件readinginstatic.rs
中的模块,如下所述:
use ::GAMEDATA;
pub struct readinginstatic {
pub structure:String,
}
impl readinginstatic {
pub fn print_static(&self) {
println!("In Print static width:{}", *::GAMEDATA);
}
}
我得到了错误:
在板条箱根中找不到
尝试导入GAMEDATA
时。
如果在另一个文件中定义了lazy_static
单例,是否可以访问另一个模块?
为确保提供一个最小,完整和可验证的示例,这里是我在GitHub上的整个示例代码:https://github.com/camccar/moduleError
答案 0 :(得分:2)
::GAMEDATA
指的是GAMEDATA
板条箱的板条根中的一个名为gamedata
的值。但是,您定义GAMEDATA
的位置不在该板条箱中,而是在您的main.rs
文件中,其中有gamedata
作为依赖项。
因此,您要在此处进行的操作是从板条箱中伸出援手,请使用取决于您的板条箱中的某些物品,我不确定,但我认为这是不允许的。
您可以考虑将其反转,而不是在gamedata
板条箱中初始化GAMEDATA,并且如果您需要在主机中使用它,可以正常地use
进行
extern crate gamedata;
use gamedata::GAMEDATA;
fn main(){
println!("Game Data:{}", *GAMEDATA);
...
}
如果GAMEDATA
不是您的游戏数据箱应该知道的定义,则可以在main内部构造它,并将其作为参数传递给gamedata
箱中的某个函数。