说明一下,我有宏信息!(“ Hello world”)来自Rust log 而且它在任何地方都可以很好地工作,但不适用于Organize test rust中用于货物集成测试的common.rs文件。由于宏的使用,声明(用于导入)必须在根模块中声明,然后提供子模块。但是在集成测试用例中,我们没有根模块,也无法为common.rs(子模块)提供宏。
示例1: 模块父
#[macro_use]
use extern crate some_crate;
mod child.
在这种情况下,孩子可以毫无问题地使用宏
示例2: 没有模块(作为集成测试用例),只有测试文件 some_test.rs
#[macro_use]
use extern crate some_crate;
mod child.
在这种情况下,孩子看不到宏,我们只能以这种方式提供宏使用。
为解决此问题,我创建了一个实用程序模块logger_util,可以使用宏,然后将其导入some_test.rs
示例3: 没有模块(作为集成测试用例),只有测试文件 some_test.rs
mod child
child.rs
use logger_util
fn foo() {
logger_util.use_macro()
}
logger_util.rs
#[macro_use]
extern crate some_crate;
pub fn use_macro() {
some_macro!("Hello world")
}
接下来是我的问题: 我该如何代替:
fn foo() {
info!("{} {} ", 123, "hello world")
}
从以下位置执行此操作
fn foo() {
let print_data: SomeType = "{} {} ", 123, "hello world";
use_macro(print_data)
}
致logger_util.rs
pub fn use_macro(print_data: SomeType) {
info!("Hello world")
}
答案 0 :(得分:0)
解决方案:
use logger_util;
fn foo() {
logger_util::use_macro(format_args!("{} {} ", 123, "hello world"))
}
use std::fmt::Arguments;
pub fn use_macro(args: Arguments) {
info!("{}", args)
}