Rust 1.7.0 macro宏的复用 #[macro_use]的用法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Rust 1.7.0 macro宏的复用 #[macro_use]的用法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2157字,纯文字阅读大概需要4分钟。
内容图文
Rust 1.7.0 中的宏使用范围包括三种情况:
第一种情况是宏定义在当前文件中,这个文件可能是 crate 默认的 module,也可能是任意的 module 模块。
第二种情况是宏定义在当前 crate ,但是不是在当前文件中,而是其他 module 模块中。
第三种情况是宏定义在其他的 crate 中,或者其他的 crate 子模块中。
使用#[macro_use] 可以使被注解的module模块中的宏应用到当前作用域中;或者注释crate中的宏应用到当前crate作用域中。
第一种情况的例子:
macro_rules! say_hello{
()=>(
println!("Hello");
)
}
fn main(){
say_hello!();
}
第二种情况:
- 先创建一个新文件 macros.rs ,定义一个宏 say_bonjour
macro_rules! say_bonjour{
()=>(
println!("Bonjour");
)
}
- 使用
#[macro_use]
pub
mod macros;
macro_rules! say_hello{
()=>(
println!("Hello");
)
}
fnmain(){
say_hello!();
say_bonjour!();
}
-
如果没有 #[macro_use] 编译会出现
error: macro undefined: ‘say_bonjour!’
第三种情况:注释在外部 crate 的语句
-
创建 log 项目
cargo new log
-
在 log 项目中,lib.rs 是入口,在lib.rs中定义 macors 模块。
.
.
.
#[macro_use]
mod macros;
.
.
.
然后,创建对应mod macros 的 macros.rs 文件 vi src/macros.rs
声明宏 log、error、warn、info,在每个宏定义前面添加 #[macro_export]注释,表示这些宏可以被外部的 crate 使用。
.
.
.
#[macro_export]
macro_rules! log {
...
}
#[macro_export]
macro_rules! error {
(target:$target:expr, $($arg:tt)*) => (
log!(target:$target, $crate::LogLevel::Error, $($arg)*);
);
($($arg:tt)*) => (
log!($crate::LogLevel::Error, $($arg)*);
)
}
#[macro_export]
macro_rules! warn {
(target:$target:expr, $($arg:tt)*) => (
log!(target:$target, $crate::LogLevel::Warn, $($arg)*);
);
($($arg:tt)*) => (
log!($crate::LogLevel::Warn, $($arg)*);
)
}
#[macro_export]
macro_rules! info {
(target:$target:expr, $($arg:tt)*) => (
log!(target:$target, $crate::LogLevel::Info, $($arg)*);
);
($($arg:tt)*) => (
log!($crate::LogLevel::Info, $($arg)*);
)
}
.
.
.
使用:引入 log crate的时候,注明#[macro_use]
#[macro_use]
extern crate log;
.
.
.
if !shutdown.load(Ordering::SeqCst) {
info!("ConnectionHandler: read timed out ({:?}). Server not shutdown, so retrying read.",
err);
continue;
} else {
info!("ConnectionHandler: read timed out ({:?}). Server shutdown, so closing connection.",
err);
break;
}
.
.
.
原文:http://blog.csdn.net/teamlet/article/details/50989186
内容总结
以上是互联网集市为您收集整理的Rust 1.7.0 macro宏的复用 #[macro_use]的用法全部内容,希望文章能够帮你解决Rust 1.7.0 macro宏的复用 #[macro_use]的用法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。