首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为Rust宏创建代理函数

为Rust宏创建代理函数
EN

Stack Overflow用户
提问于 2021-04-22 22:05:05
回答 1查看 160关注 0票数 0

我跟踪这个解决办法来获取信息!,日志!从事测试工作的其他人员:

https://stackoverflow.com/a/67105052/5884503

我就是这么做的。在我们测试的情况下,我创建了要导入的代理函数,如下所示:

代码语言:javascript
复制
#[cfg(not(test))] 
use log::{info, error}; // Use log crate when building application
#[cfg(test)]
use crate::{info, error}; // Workaround to use prinltn! for logs.

下面是:

代码语言:javascript
复制
#[macro_export]
macro_rules! info {
    (target: $target:expr, $($arg:tt)*) => { println!("target: {}, info: {}", $target, $($arg),*) };
    ($($arg:tt)*) => { println!("info: {}", $($arg),*) };
}

#[macro_export]
macro_rules! error {
    (target: $target:expr, $($arg:tt)*) => { printn!("target: {}, info: {}", $target, $($arg),*) };
    ($($arg:tt)*) => { println!("error: {}", $($arg),*) };
}

然后我就这样叫:

代码语言:javascript
复制
       error!("Unauthorized message has authentication header but WwwAuthenticate fails to parse. RTSP Message: {:?}", message);

但我明白:

代码语言:javascript
复制
error: expected expression, found `,`
   --> src/rtsp_machine.rs:440:96
    |
440 |                     "Unauthorized message has no AuthenticationInfo header. RTSP Message: {:?}",
    |                                                                                                ^ expected expression

宏参数中的重复是有问题的,但我不知道到底是什么

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-23 06:29:59

您没有指定用逗号分隔参数的可能性,因此出现了“预期表达式,找到的,__”错误。

还必须包括format!,因为生成的println!的第一个参数不是格式链。

然后,也可以使用$(,)?部分选择最后一个逗号,我可以将宏更改为:

代码语言:javascript
复制
#[macro_export]
macro_rules! error {
    (target: $target:expr $(,$arg:tt)*) => { println!("target: {}, info: {}", $target, format!($($arg,)*)) };
    ($($arg:tt),*$(,)?) => { println!("error: {}", format!($($arg,)*)) };
}

例:

代码语言:javascript
复制
fn main() {
    error!(target: "my target" , " thing={:?}", "test");
    error!("bla={} and bit={}", 54, 7);
}

会打印

代码语言:javascript
复制
target: my target, info:  thing="test"
error: bla=54 and bit=7
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67221397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档