2 个不稳定版本
使用旧的 Rust 2015
0.3.0 | 2018 年 9 月 21 日 |
---|---|
0.2.0 | 2018 年 9 月 21 日 |
0.1.0 |
|
#1613 在 Rust 模式
5KB
待办事项
用法
#[allow(unused)]
#[macro_use]
extern crate todo;
fn my_function() -> Result<(), String> {
TODO!(
"`my_function` should return something _really groundbreaking_";
Ok(())
)
}
fn main() {
assert_eq!(my_function().unwrap(), ());
}
当与调试断言一起编译时,将使用 Ok(())
模拟值,您的代码将进行类型检查并运行,而无需使用 unimplemented!()
(尽管如果您不提供模拟值,它将回退到使用包含您的待办事项消息的 unimplemented!()
)。
但是,当您在发布模式下启用调试断言进行构建时,您将获得一个包含您的待办事项消息的编译时错误。
这有用吗?
这 曾经 是由工作中的特定情况所激发的,我们在一些结构体中引入了一个特质,然后为每个结构体实现该特质的工作进行了拆分。其中某个结构体的实现将调用另一个结构体的实现,但因为我们没有在另一个结构体上提供模拟特质实现,所以我们完全忘记了这件事,然后忘记了回到第一个结构体的实现。
这可能不是对这个的最佳推销,但我 认为 它 可能 有所帮助。
这真的是一件小事吗?
是的
可能太小,无法作为 crate 依赖项而引人注目?
可能。嗯。是的,您可能有一个观点。如果它太小,令人烦恼,不适合作为 crate,但您认为它可能对您正在做的事情有所帮助,您可以将宏声明直接复制粘贴到您的代码中(没有坏心情!)
#[cfg(not(debug_assertions))]
#[allow(unused)]
macro_rules! TODO {
($message:expr; $dummy:expr) => {
compile_error!(concat!(
"TODO: Must implement prior to release: ",
$message
));
};
($message:expr;) => {
compile_error!(concat!(
"TODO: Must implement prior to release: ",
$message
));
};
($message:expr) => {
compile_error!(concat!(
"TODO: Must implement prior to release: ",
$message
));
};
}
#[cfg(debug_assertions)]
#[allow(unused)]
macro_rules! TODO {
($message:expr; $dummy:expr) => {{
$dummy
}};
($message:expr;) => {{
unimplemented!($message)
}};
($message:expr) => {{
unimplemented!($message)
}};
}