當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust unimplemented用法及代碼示例


本文簡要介紹rust語言中 Macro std::unimplemented 的用法。

用法

macro_rules! unimplemented {
    () => { ... };
    ($($arg : tt) +) => { ... };
}

通過使用 “not implemented” 消息Panics來指示未實現的代碼。

這允許您的代碼使用type-check,如果您正在原型設計或實現需要多個您不打算全部使用的方法的特征,這將非常有用。

unimplemented! todo! 之間的區別在於,雖然 todo! 傳達了稍後實現函數的意圖並且消息是 “not yet implemented”,但 unimplemented! 沒有這樣的聲明。它的消息是“not implemented”。還有一些 IDE 會標記 todo!

Panics

這將始終是 panic! ,因為unimplemented! 隻是panic! 的簡寫,帶有固定的特定消息。

panic! 一樣,此宏具有用於顯示自定義值的第二種形式。

例子

假設我們有一個特征 Foo

trait Foo {
    fn bar(&self) -> u8;
    fn baz(&self);
    fn qux(&self) -> Result<u64, ()>;
}

我們想為'MyStruct' 實現Foo,但由於某種原因,隻實現bar() 函數才有意義。 baz()qux() 仍然需要在 Foo 的實現中定義,但我們可以在它們的定義中使用 unimplemented! 以允許我們的代碼編譯。

如果達到未實現的方法,我們仍然希望程序停止運行。

struct MyStruct;

impl Foo for MyStruct {
    fn bar(&self) -> u8 {
        1 + 1
    }

    fn baz(&self) {
        // It makes no sense to `baz` a `MyStruct`, so we have no logic here
        // at all.
        // This will display "thread 'main' panicked at 'not implemented'".
        unimplemented!();
    }

    fn qux(&self) -> Result<u64, ()> {
        // We have some logic here,
        // We can add a message to unimplemented! to display our omission.
        // This will display:
        // "thread 'main' panicked at 'not implemented: MyStruct isn't quxable'".
        unimplemented!("MyStruct isn't quxable");
    }
}

fn main() {
    let s = MyStruct;
    s.bar();
}

相關用法


注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Macro std::unimplemented。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。