Macro std::unimplemented 1.0.0[−][src]
macro_rules! unimplemented { () => { ... }; ($($arg:tt)+) => { ... }; }
Expand description
通过恐慌并带有 “not implemented” 消息来指示未实现的代码。
这允许您的代码进行类型检查,如果您正在设计原型或实现需要多个您不打算使用所有方法的特征,这将非常有用。
unimplemented!
和 todo!
之间的区别在于,尽管 todo!
传达了稍后实现该功能的意图,并且消息为 “not yet implemented”,但 unimplemented!
并未提出任何此类声明。
它的消息是 “not implemented”。
还有一些 IDE 会标记 todo!
。
Panics
这将始终是 panic!
,因为 unimplemented!
只是 panic!
的简写,带有固定的特定消息。
像 panic!
一样,此宏具有用于显示自定义值的第二种形式。
Examples
假设我们有一个 trait Foo
:
trait Foo { fn bar(&self) -> u8; fn baz(&self); fn qux(&self) -> Result<u64, ()>; }Run
我们想为 ‘MyStruct’ 实现 Foo
,但是由于某些原因,只有实现 bar()
函数才有意义。
baz()
在我们的 Foo
实现中仍然需要定义 qux()
,但是我们可以在其定义中使用 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