基本上你可能会这样做:
macro_rules! log_if_dbg {
(...) => (if cfg!(debug_assertions) { /* do logging */ })
}
Run Code Online (Sandbox Code Playgroud)
这就是 宏debug_assert!的实现方式.医生说:
与assert!,debug_assert不同!默认情况下,语句仅在非优化构建中启用.优化的构建将省略所有debug_assert!语句,除非-C debug-assertions传递给编译器.这使得debug_assert!对于过于昂贵而无法在发布版本中出现但在开发期间可能有用的检查非常有用.
这与您的情况相同,仅用于断言,而不是记录.看源头:
macro_rules! debug_assert {
($($arg:tt)*) => (if cfg!(debug_assertions) { assert!($($arg)*); })
}
Run Code Online (Sandbox Code Playgroud)
这个也在Rust用户论坛上进行了简要讨论,其中摘要是cfg(debug_assertions)检查我们是否处于调试模式的方法.
但是,我不知道它有多稳定cfg(debug_assertions).