如何将参数从函数传递到宏

时间:2018-10-12 07:42:17

标签: rust

说明一下,我有宏信息!(“ 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")
}

1 个答案:

答案 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)
}