Rust无法将Singleton从全局空间导入另一个文件中的另一个模块
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rust无法将Singleton从全局空间导入另一个文件中的另一个模块相关的知识,希望对你有一定的参考价值。
使用lazy_static
库创建单例。我无法在另一个文件的模块中访问该单例。如果模块定义在主函数下面,我可以正常访问它。
给定如下的主文件,test_stuff
可以访问gamedata:
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
单例,是否可以在另一个模块中访问?
为了确保我提供了一个Minimal,Complete和Verifiable示例,这是我在GitHub上的完整示例代码:https://github.com/camccar/moduleError
::GAMEDATA
指的是在GAMEDATA
板条箱的根箱中称为gamedata
的一些值。但是,你定义的GAMEDATA
不在那个箱子里,它在你的main.rs
文件中有gamedata
作为依赖。
所以你在这里尝试做的就是从箱子里拿出一些东西来取决于你,我不确定,但我不认为这是允许的。
你可以考虑反转这个,而不是在你的gamedata
箱子里初始化GAMEDATA,如果你需要在main中使用它你可以正常use
:
extern crate gamedata;
use gamedata::GAMEDATA;
fn main(){
println!("Game Data:{}", *GAMEDATA);
...
}
或者,如果GAMEDATA
不是您的游戏数据箱应该知道如何定义的东西,您可以在main中构建它并将其传递给gamedata
crate中的某个函数作为参数。
以上是关于Rust无法将Singleton从全局空间导入另一个文件中的另一个模块的主要内容,如果未能解决你的问题,请参考以下文章
wsdl.exe 错误:无法从命名空间“...”导入绑定“...”