我找到了std::sync::Once。但据我所知,该示例中的代码似乎必须在函数内运行。如果我将示例代码放在函数之外,我会得到
75 | START.call_once(|| {
| ^ expected one of `!` or `::`
(……当然这些建议不适用)。
我想做的具体事情是在实用程序箱中配置日志记录。这个板条箱中的任何函数都可以首先被调用...目前我必须允许这些函数中的任何一个可能必须运行
config_logging
。
注意,我还发现日志记录配置似乎也是每个板条箱本地的。 IE。每个箱子都需要配置自己的日志记录。据我所知,可能有办法解决这个问题,但显然我不想向这个库箱中的每个函数传递额外的参数。
根据 Chayim Friedman 的建议。
我需要做的就是这样:
pub fn init(){
match config_logging::configure_logging() {
Ok(()) => (),
Err(e) => {
if ! e.to_string().contains("logging system was already initialized"){
println!("\n\nWARNING. Logging does not appear to have been initialised.\nError was {e}\n\n");
}
}
}
}
...在被调用的函数中,该函数位于其自己的本地
config_logging
板条箱中,我很确定如果调用板条箱的日志记录实际上已经配置,则以下行会引发错误:
log4rs::init_config(config)?;
...但是这个函数
init
必须从调用者箱中显式调用:必须显式“初始化”实用程序模块并不好。