Macro core::unimplemented 1.0.0[−][src]
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