Macro std::unimplemented
1.0.0 · source · macro_rules! unimplemented { () => { ... }; ($($arg:tt)+) => { ... }; }
Expand description
通过 panic 并带有 “not implemented” 的消息来指示未实现的代码。
这允许您的代码进行类型检查,如果您正在设计原型或实现需要多个您不打算使用所有方法的特征,这将非常有用。
unimplemented!
和 todo!
之间的区别在于,尽管 todo!
传达了稍后实现该功能的意图,并且消息为 “not yet implemented”,但 unimplemented!
并未提出任何此类声明。
它的消息是 “not implemented”。
还有一些 IDE 会标记 todo!
。
Panics
这将始终是 panic!
,因为 unimplemented!
只是 panic!
的简写,带有固定的特定消息。
像 panic!
一样,此宏具有用于显示自定义值的第二种形式。
Examples
假设我们有一个 Foo
trait:
trait Foo {
fn bar(&self) -> u8;
fn baz(&self);
fn qux(&self) -> Result<u64, ()>;
}
Run我们想为 ‘MyStruct’ 实现 Foo
,但是由于某些原因,只有实现 bar()
函数才有意义。
baz()
和 qux()
仍然需要在我们的 Foo
实现中定义,但我们可以在它们的定义中使用 unimplemented!
来允许我们的代码编译。
如果达到未实现的方法,我们仍然希望程序停止运行。
struct MyStruct;
impl Foo for MyStruct {
fn bar(&self) -> u8 {
1 + 1
}
fn baz(&self) {
// `baz` 和 `MyStruct` 没有任何意义,因此我们完全没有逻辑。
// 这将显示 "thread 'main' panicked at 'not implemented'"。
unimplemented!();
}
fn qux(&self) -> Result<u64, ()> {
// 我们这里有一些逻辑,我们可以向未实现中添加一条消息! 显示我们的遗漏。
// 这将显示: "thread 'main' panicked at 'not implemented: MyStruct isn't quxable'"。
unimplemented!("MyStruct isn't quxable");
}
}
fn main() {
let s = MyStruct;
s.bar();
}
Run