2016-11-26 70 views
4

我想使用一個通用的數據類型,其中一種類型是不需要的(圖中的邊權重)。我一直在想使用從未鍵入此,這將是這個樣子:如何指定不需要其中一種類型的泛型類型?

#![feature(never_type)] 

struct Foo<T> { 
    bar: T 
} 

impl<T> Foo<T> { 
    fn foo(&mut self, bar: T) { 
     self.bar = bar; 
    } 
} 

fn main() { 
    let mut foo: Foo<!> = Foo { bar: "nada" }; 
    foo.foo("nada"); 
} 

這顯然導致了"nada"佔位符類型不匹配,但只是打字什麼也不會導致其他錯誤。是!這裏使用的正確類型,如果是這樣,那麼正確的語法是什麼?

我已經得到它使用()而不是!,但我有點不確定這是否是正確的選擇類型。我相信在效率方面它應該沒有區別,因爲()沒有內存佔用?

回答

5

()是正確的選擇。它是一種具有單個值的類型(也稱爲()),因此它有一個值,但不包含任何信息。

!沒有任何值,所以如果你把它放在一個結構中,結構類型也沒有值,並且基本上是不可用的。

+0

這個答案是正確的,但是*有*的時候你想要使用'!'作爲一個類型。進一步閱讀:[RFC 1216](https://github.com/rust-lang/rfcs/blob/master/text/1216-bang-type.md)和相應的[追蹤問題](https:// github。 COM /防鏽琅/防鏽/問題/ 35121)。 – Shepmaster

+1

注意我沒有說'!'是不可用的,只有結構不是很有用(儘管它可以用來表示代碼永遠不會像'!'本身那樣執行)。我其實喜歡RFC 1216。 – starblue